Cho 3 chuỗi nhị phân A, B, C độ dài N. Tìm số bit cần đảo trong A và B sao cho A XOR B = C.
Bảng chân lý XOR
| X | Y | X XOR Y |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
Quy tắc lật bit
- A[i]==B[i] và C[i]==0 → không lật
- A[i]==B[i] và C[i]==1 → lật 1 trong 2, đếm +1
- A[i]!=B[i] và C[i]==0 → lật 1 trong 2, đếm +1
- A[i]!=B[i] và C[i]==1 → không lật
Ví dụ
Đầu vào - A={0,0,0,0}, B={1,0,1,0}, C={1,1,1,1}
Đầu ra - Số lần lật: 2
Chương trình mẫu (C++)
#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 (A[i] == B[i] && C[i] == 1)
count++;
else if (A[i] != B[i] && C[i] == 0)
count++;
}
return count;
}
int main() {
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 << "Số bit cần lật: " << flipCount(a, b, c, N);
return 0;
}
Kết quả
Số bit cần lật: 2