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

更新於: 2020年8月31日

258 次檢視

啟動您的 職業生涯

透過完成課程獲得認證

開始
廣告