C++ 中透過給定操作使數字成為 2 的冪的計數
給定一個正整數陣列。目標是找到最多隻能透過向其中新增 1 來使數字成為 2 的冪的數字的計數。
我們將使用 log2(i) 檢查數字是否為 2 的冪或可以透過向其新增 1 來成為 2 的冪。如果是,則遞增計數。
讓我們透過示例來理解。
輸入 − arr[]= {1,3,2,5,6 },
輸出 − 可以變成 2 的冪的數字的計數:3
解釋 − 1+1=2 → 21 , 3+1=4 → 22 , 2=21 其他將變成 5+1=6, 6+1=7
輸入 − arr[]= {2,4,8,16 },
輸出− 可以變成 2 的冪的數字的計數:4
解釋 − 所有 4 個數字本身就是 2 的冪。
下面程式中使用的方案如下
我們使用一個整數陣列 arr[],並用隨機正數初始化。
函式 powofTwo(int arr[],int n) 以陣列及其長度作為輸入,並返回可以或可以變成 2 的冪的數字的計數。
將初始計數設定為 0。
從 i=0 到 i<n 遍歷陣列。
對於每個元素,檢查 floor(log2(arr[i]))==ceil((log2(arr[i])) 或 floor(log2(arr[i]+1))==ceil((log2(arr[i]+1)),如果為真,則在兩種情況下都遞增計數。
返回計數作為最終結果。
示例
#include <bits/stdc++.h> #include <math.h> using namespace std; int powofTwo(int arr[],int n){ int count=0; for(int i=0;i<n;i++){ if( floor(log2(arr[i])) == ceil(log2(arr[i])) ) { count++; } else{ ++arr[i]; if( floor(log2(arr[i])) == ceil(log2(arr[i])) ) { count++; } } } return count; } int main(){ int Arr[]={ 5,6,9,3,1 }; int len=sizeof(Arr)/sizeof(Arr[0]); cout<<endl<<"Count of numbers with power of 2 possible: "<<powofTwo(Arr,len); return 0; }
輸出
如果我們執行上述程式碼,它將生成以下輸出:
Count of numbers with power of 2 possible: 2
廣告