给我们一个正整数数组。目的是找出最多可以加1的数的个数。
我们将使用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)),如果在两种情况下均以true递增计数。
返回计数作为最终结果。
#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