C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

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の累乗であるかまたは2の累乗にすることができる数値のカウントを返します。

  • 初期カウントを0とします。

  • 配列をi=0からiまでトラバースします。

  • 各要素について、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

  1. C++の回文の2乗であるすべての回文を数えます

    このチュートリアルでは、回文の二乗である回文の数を見つけるプログラムについて説明します。 このために、2つの値LとRが提供されます。私たちのタスクは、指定された範囲内のスーパーパリンドロームの数を見つけることです。スーパーパリンドロームとは、数とその正方形の両方がパリンドロームであるものです。 例 #include <bits/stdc++.h> using namespace std; //checking if the number is a palindrome bool if_palin(int x){    int ans = 0;   &

  2. C++で指定された数まで配列要素を最大化します

    問題の説明 整数、数値、および最大値の配列が与えられた場合、タスクは配列要素から取得できる最大値を計算することです。最初からトラバースする配列のすべての値は、前のインデックスから取得した結果に加算または減算して、任意の時点で結果が0以上、指定された最大値以下になるようにすることができます。インデックス0の場合、指定された数に等しい前の結果を取得します。可能な回答がない場合は-1を印刷します。 arr [] ={3、10、6、4、5}、数値=1、最大値=15の場合、加算と減算の順序に従うと、出力は9になります- 1 + 3 + 10 – 6 – 4 + 5 アルゴリズ