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
广告
数据结构
网络
关系型数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP