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

C++で指定された数値のセットビットを使用した最小数


問題の説明

符号なしの数が与えられた場合、与えられた符号なしの数のビットを使用して形成できる最小の数を見つけます。

input =10の場合、答えは3になります

10の2進表現は1010で、2セットビットの最小数は0011、つまり3

アルゴリズム

1. Count the number of set bits.
2. (Number of set bits) ^ 2 – 1 represents the minimized number)

#include <bits/stdc++.h>
using namespace std;
int getSetBits(int n) {
   int cnt = 0;
   while (n) {
      ++cnt;
      n = n & (n - 1);
   }
   return cnt;
}
int getMinNumber(int n){
   int bits = getSetBits(n);
   return pow(2, bits) - 1;
}
int main() {
   int n = 10;
   cout << "Minimum number = " << getMinNumber(n) << endl;
   return 0;
   return 0;
}

上記のプログラムをコンパイルして実行する場合。次の出力を生成します

出力

Minimum number = 3

  1. C ++を使用して、L番目とR番目のインデックスの間でのみビットが設定されている数値を検索します

    与えられた問題では、与えられた範囲L、Rの間に設定されたすべてのビットを持つ数値を見つける必要があります。たとえば、- Input: L = 1, R = 5 Output: 62 Explanation: representation of given L and R in binary form is 0..0111110 Input: L = 1, R = 4 Output: 30 Explanation: representation of given L and R in binary form is 0..11110 解決策を見つけるためのアプローチ 与えられた問題では、ブルー

  2. C++を使用してセットの反射関係の数を見つける

    この記事では、集合上の反射関係の数を見つけるためのアプローチについて説明します。この問題では、数nが与えられ、n個の自然数のセットで、反射関係の数を決定する必要があります。 反射関係 −集合Aの関係は、(a、a)が集合Aに属するすべてのaがRに属する場合、反射的と呼ばれます。たとえば、- Input : x = 1 Output : 1 Explanation : set = { 1 }, reflexive relations on A * A : { { 1 } } Input : x = 2 Output : 4 Explanation : set = { 1,2 }, reflex