题意:汉明码?给出4个圈,里面分别填0或者1,相交的部分等于它们的和mod2,现在给出一个7位码,前四位分别对应第四个大圈,后面的3个分别对应相交的那三个区域。让你判断给的码是否符合规范,如果不符合规范,每次只能改变某一个码,求出符合的码。
解法:既然每次都只能改变一个码,那我就暴力枚举了呗。
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;
int a[8];
int main()
{
for(int i = 1; i <= 7; i++)
scanf("%d",&a[i]);
if((a[1] + a[2] + a[4]) % 2 == a[7] && (a[1] + a[3] + a[4])%2 == a[6] && (a[2]+a[3]+a[4])%2 == a[5])
{
for(int i = 1; i <= 7; i++)
printf("%d ",a[i]);
return 0;
}
int b[8];
for(int i = 1; i <= 7; i++)
{
for(int j = 1; j <= 7; j++)
{
if(j == i) b[j] = !a[j];
else b[j] = a[j];
}
if((b[1] + b[2] + b[4]) % 2 == b[7] && (b[1] + b[3] + b[4])%2 == b[6] && (b[2]+b[3]+b[4])%2 == b[5])
{
for(int i = 1; i <= 7; i++)
printf("%d ",b[i]);
return 0;
}
}
return 0;
}