Computer >> 컴퓨터 >  >> 프로그램 작성 >> C 프로그래밍

C++에서 A와 B의 XOR이 C와 같도록 뒤집을 최소 비트 수를 계산합니다.

<시간/>

길이가 N인 세 개의 이진 시퀀스 A, B 및 C가 제공됩니다. 각 시퀀스는 이진수를 나타냅니다. 우리는 아니오를 찾아야 합니다. A와 B의 XOR은 C가 되도록 A와 B의 비트에 필요한 플립 수. A XOR B는 C가 됩니다.

먼저 XOR 연산의 진리표에 대해 알아보겠습니다. -

X X XOR Y
0 0 0
0 1 1
1 0 1
1 1 0

위의 표에서 X와 Y의 동일한 값에 대해 X XOR Y가 0이 아니면 1이 되는 것을 관찰했습니다. 따라서 이것은 C에 도달하기 위해 A와 B에서 뒤집힐 비트를 찾는 데 도움이 될 것입니다. 사례는

  • 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[]는 이진 번호를 저장하는 데 사용됩니다.

  • 함수 flipCount(int A[], int B[], int C[], int n)은 배열 a, b, c와 그 길이 n을 입력으로 받아 A[] 또는 B[ 비트에 필요한 뒤집기 횟수를 반환합니다. ] C[]를 A xorB

    로 가져옵니다.
  • 변수 카운트는 플립 카운트를 나타내며 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