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 次查看

启动您的 职业生涯

通过完成课程获得认证

开始
广告
© . All rights reserved.