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

C++のセットビット数が1つ少ない以前の小さい整数


この問題では、整数nが与えられます。私たちのタスクは、数値の2進表現の1セットビットを変更することによって形成できるn未満の最大の数値を出力することです。

問題を理解するために例を見てみましょう

Input: n = 3
Output: 2
Explanation: (3)10 = (011)2
Flipping one set bit gives 001 and 010. 010 is greater i.e. 2.

この問題を解決するには、右端のセットビットを反転してゼロにする必要があります。これにより、数値の1ビットを反転して検出されるn未満の可能な最大の数値が作成されます。

ソリューションの実装を示すプログラム

#include<iostream>
#include<math.h>
using namespace std;
int returnRightSetBit(int n) {
   return log2(n & -n) + 1;
}
void previousSmallerInteger(int n) {
   int rightBit = returnRightSetBit(n);
   cout<<(n&~(1<<(rightBit - 1)));
}
int main() {
   int n = 3452;
   cout<<"The number is "<<n<<"\nThe greatest integer smaller than the number is : ";
   previousSmallerInteger(n);
   return 0;
}

出力

The number is 3452
The greatest integer smaller than the number is : 3448

  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