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

C++でn個のセットビットとm個のアンセットビットを持つ最大数を検索します


この問題では、nとmの2つの整数値が与えられます。私たちのタスクは、n個のセットビットとm個のアンセットビットを持つ最大数を見つけることです。 数値の2進表現で。

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

Input : n = 3, m = 1
Output : 14

説明

Largest number will have 3 set bits and then 1 unset bit.
(1110)2 = 14

ソリューションアプローチ

この問題の簡単な解決策は、(n + m)個のセットビットで構成される数を見つけることです。この数値から、末尾(LSB)からmビットをオフに切り替えます。 (n + m)セットビットで数値を作成するには、

$$(1 \ ll(n + m))-1 $$

次に、mビットを切り替えて、数値を返します。

ソリューションの動作を説明するプログラム

#include <iostream>
using namespace std;
int findlargestNumber(int n, int m){
   int maxNum = (1 << (n + m)) - 1;
   if (m == 0)
      return maxNum;
   int number = (1 << m) - 1;
   return (maxNum ^ number);
}
int main(){
   int n = 5,
   m = 2;
   cout<<"The largest number with "<<n<<" set bits and "<<m<<" unset bits is "<<findlargestNumber(n, m);
   return 0;
}

出力

The largest number with 5 set bits and 2 unset bits is 124

  1. 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

  2. C++で数値に同じ数の設定ビットと未設定ビットがあるかどうかを確認します

    このセクションでは、数値の設定ビット数と未設定ビット数が同じであるかどうかを確認します。番号12がそこにあると仮定します。そのバイナリ表現は1100です。これは0と1の数が同じです。 アプローチは簡単です。数値の各ビットをチェックし、それが1の場合は、set_bit_countを増やし、0の場合は、unset_bit_countを増やします。最後に、それらが同じである場合はtrueを返し、そうでない場合はfalseを返します。 例 #include <iostream> using namespace std; bool hasSameSetUnset(int n) { &nbs