C++でAとBのXORがCと等しくなるようにフリップする最小ビットをカウントします
長さNの3つのバイナリシーケンスA、B、Cが与えられます。各シーケンスは2進数を表します。いいえを見つける必要があります。 AとBのXORがCになるようにAとBのビットに必要なフリップの数。AXORBはCになります。
まず、XOR演算の真理値表について学びましょう-
X | Y | X XOR Y |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
上記の表から、XとYの同じ値の場合、X XOR Yの結果は0になり、それ以外の場合は1になります。したがって、これは、AとBで反転してCに到達するビットを見つけるのに役立ちます。>>
- A [i] ==B[i]およびC[i]==0の場合、フリップはありません。
- A [i] ==B[i]およびC[i]==1の場合、A[i]またはB[i]のいずれかを反転し、反転カウントを1増やします
- A [i]!=B[i]およびC[i]==0の場合、A[i]またはB[i]のいずれかを反転し、反転カウントを1増やします
- A [i]!=B[i]およびC[i]==1の場合、フリップは必要ありません。
入力
A[]= { 0,0,0,0 } B[]= { 1,0,1,0 } C= {1,1,1,1}
出力
Required flips : 2
説明
A[0] xor B[0] 0 xor 1 = 1 C[0]=1 no flip A[1] xor B[1] 0 xor 0 = 0 C[0]=1 flip count=1 A[2] xor B[2] 0 xor 1 = 1 C[0]=1 no flip A[3] xor B[3] 0 xor 0 = 0 C[0]=1flip count=2
入力
A[]= { 0,0,1,1 } B[]= { 0,0,1,1 } C= {0,0,1,1}
出力
Required flips : 2
説明
A[0] xor B[0] 0 xor 0 = 0 C[0]=0 no flip A[1] xor B[1] 0 xor 0 = 0 C[0]=0 no flip A[2] xor B[2] 1 xor 1 = 0 C[0]=1 flip count=1 A[3] xor B[3] 1 xor 1 = 0 C[0]=1 flip count=2
以下のプログラムで使用されているアプローチは次のとおりです
-
配列a[]、b []、およびc []は、2進数を格納するために使用されます。
-
関数flipCount(int A []、int B []、int C []、int n)は、配列a、b、cとその長さnを入力として受け取り、A[]またはB[のいずれかのビットで必要なフリップの数を返します。 ]C[]をAxorBとして取得する
-
変数カウントはフリップカウントを表し、0で初期化されます。
-
forループを使用して、セル内の各ビットをi=0からi
までトラバースします。 -
各ビットA[i]およびB[i]について。それらが等しく、C[i]が1増加カウントの場合。
-
各ビットA[i]およびB[i]について。それらが等しくなく、C[i]が0の場合はカウントを増やします。
-
必要な結果としてカウントを返します。
例
#include<bits/stdc++.h> using namespace std; int flipCount(int A[], int B[], int C[], int N){ int count = 0; for (int i=0; i < N; ++i){ // If both A[i] and B[i] are equal then XOR results 0, if C[i] is 1 flip if (A[i] == B[i] && C[i] == 1) ++count; // If Both A and B are unequal then XOR results 1 , if C[i] is 0 flip else if (A[i] != B[i] && C[i] == 0) ++count; } return count; } int main(){ //N represent total count of Bits int N = 5; int a[] ={1,0,0,0,0}; int b[] ={0,0,0,1,0}; int c[] ={1,0,1,1,1}; cout <<"Minimum bits to flip such that XOR of A and B equal to C :"<<flipCount(a, b, c,N); return 0; }
出力
Minimum bits to flip such that XOR of A and B equal to C :2
-
xとその桁の合計がC++で指定されたnと等しくなるような数xを見つけます
ここで、1つの問題が発生します。ここで、数値nを取得する場合、x +桁の合計xが指定された数値nと同じになるように、xなどの別の値を見つける必要があります。 nの値が21であると仮定します。このプログラムは、15+桁の合計15、つまり15 + 1 + 5 =21=nとして数値x=15を返します。 この問題を解決するには、単純なアプローチに従う必要があります。 1からnまで繰り返し、各繰り返しで、数値とその桁の合計の合計が数値と同じであるかどうかを確認し、停止します。それ以外の場合は続行します。 例 #include<iostream> using namespace std; i
-
XORがC++の別の配列と等しくなるように、2つのバイナリ配列の最小フリップ。
問題の説明 サイズnの0と1の3つの配列が与えられた場合、タスクは、1番目と2番目の配列のi番目のインデックスビットのXORがi番目のインデックスビットと等しくなるように、1番目と2番目の配列のビットの最小フリップを見つけることです。 3番目の配列。 反転できるのは、配列1の最大pビットと配列2の最大qビットのみであることに注意してください。また、配列要素の再配置は許可されていません。 p=2およびq=5と仮定します arr1[] = {1, 0, 1, 1, 0, 1, 0} arr2[] = {0, 1, 0, 1, 0, 0, 1} arr3[] = {0, 1, 1, 0, 0,