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

C++のセットビット数が奇数の整数の数


数nが与えられた場合、バイナリ形式で奇数のセットビットを持つ整数の数を見つける必要があります。例を見てみましょう。

入力

n = 10

出力

5

1から10までの5つの整数があり、バイナリ形式のセットビットの数は奇数です。

アルゴリズム

  • 番号Nを初期化します。

  • 設定されたビット数をバイナリ形式でカウントする関数を記述します。
  • カウントを0に初期化します。

  • 1から繰り返すループを作成します N。

    • 各整数のセットビットを数えます。

    • 設定されたビット数が奇数の場合は、数を増やします。

  • カウントを返します。

実装

以下は、C++での上記のアルゴリズムの実装です

#include <bits/stdc++.h>
using namespace std;
int getSetBitsCount(int n) {
   int count = 0;
   while (n) {
      if (n % 2 == 1) {
         count += 1;
      }
      n /= 2;
   }
   return count;
}
int getOddSetBitsIntegerCount(int n) {
   int count = 0;
   for (int i = 1; i <= n; i++) {
      if (getSetBitsCount(i) % 2 == 1) {
         count += 1;
      }
   }
   return count;
}
int main() {
   int n = 10;
   cout << getOddSetBitsIntegerCount(n) << endl;
   return 0;
}

出力

上記のコードを実行すると、次の結果が得られます。

5

  1. C++で設定されたビット数に従って配列をソートします

    ここでは、セットビットに基づいて配列をソートするための1つの興味深い問題があります。配列内の要素のセットビット数が多い場合、それはセットビット数の少ない別の要素の前に配置されます。いくつかの数が12、15、7であると仮定します。したがって、設定されたビットは、基本的に2進表現の1の数です。これらは、1100(12)、1111(15)、および0111(7)です。したがって、並べ替えると次のようになります- 1111, 0111, 1100 (15, 7, 12) ここでは、最初にセットビットの数を見つける必要があります。次に、C++STLソート関数を使用してそれらをソートします。セットビット数

  2. C++でkセットビットの数を最大化するために必要な最小フリップ。

    問題の説明 2つの数値nとkが与えられた場合、結果の数値が正確にkセットビットになるようにビットを反転することにより、指定された数値を最大化するために必要な最小の反転数を見つける必要があります。入力は、k