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

C++での右端の異なるビットの位置


この問題では、2つの数値NとMが与えられます。私たちのタスクは、数値の2進表現で右端の異なるビットのインデックスを見つけることです。

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

入力 − n =12、M =9

出力 − 2

説明 −(12)2 =1100および(10)2=1010。

右から2番目のビットは別のビットです。

この問題を解決するには、数値のすべての異なるビットを見つける必要があります。すべての異なるビットを見つけるために、MとNのxorを見つけます。次に、M^Nの右端のビットを見つけます。

これを理解するには少し複雑に思えます。この方法を使用して例を解いてみましょう。

N = 12 , M = 9
N^M = 0110.

ここで右端のセットビットはインデックス2にあります。

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

#include <iostream>
#include <math.h>
using namespace std;
int rightSetBit(int N) {
   int bitIndex = log2(N & -N)+1;
   return bitIndex;
}
void rightDiffBit(int m, int n) {
   int diffBit = rightSetBit(m^n);
   cout<<diffBit;
}
int main() {
   int N = 12, M = 10;
   cout<<"Postion of first right different bit of the number "<<N<<" & "<<M<<" is ";
   rightDiffBit(N, M);
   return 0;
}

出力

Postion of first right different bit of the number 12 & 10 is 2

  1. C++でのT秒後のカエルの位置

    n個の頂点で構成される無向ツリーが1つあるとします。頂点には1からnまでの番号が付けられています。これで、カエルは頂点1からジャンプを開始します。カエルは、現在の頂点から、訪問していない別の頂点に隣接している場合、1秒でジャンプできます。カエルは、訪れた頂点に戻ることはできません。カエルが複数の頂点にジャンプできる場合は、そのうちの1つにランダムにジャンプします 確率が同じ場合、それ以外の場合、カエルが訪問していない頂点にジャンプできない場合、同じ頂点で永久にジャンプします。 ツリーはエッジの配列として与えられます。 t秒後にカエルが頂点ターゲットにいる確率を見つける必要があります。 し

  2. C++の円上で正反対の人の位置

    この問題では、2つの整数NとMが与えられます。円があり、N人がその上に立っています。 Mは人の位置を示します。私たちの仕事は、Mの反対側の人の位置を印刷することです。 問題を理解するために例を見てみましょう 入力 − n =6、M =3 出力 − 6 説明 − この問題を解決するために、2つのケースがあります。1つはポジションがポジションの半分(後半)より大きい場合、反対は前半、またはその逆です。 このための数式を数学的に作成しましょう。 ケース1 n / 2の場合、相手の位置はm-(n / 2) ケース2 − m =