给出一个布尔矩阵,由0,1组成,要求每行每列的和都为偶数,如果不满足,改动某一个位置状态可行的话就输出此位置,否则输出错误,如果不用改动就满足
就输出ok。。。想法依然简单,我想的是输入数据时候就统计各行格列的和,用b[][]来存储,然后依次找出行列中和为奇数的个数,如果某个行或者列的统计个数
等于n,矩阵长度,那么就是说此时没有可以有列或者行可以与此更改,就是错误,感觉这里可以再优化
1 #include <stdio.h>
2 int main()
3 {
4 int n,a[100][100];
5 while(scanf("%d",&n)!=EOF,n)
6 {
7 int b[100][2]={0},c[100][2]={0},k=0,n1,n2;
8 bool flag=true;
9 for(int i=1;i<=n;i++)
10 for(int j=1;j<=n;j++)
11 {scanf("%d",&a[i][j]);
12 b[i][0]+=a[i][j];
13 b[j][1]+=a[i][j];
14 }
15 //for(int j=1;j<=n;j++)
16 //printf("%d %d \n",b[j][0],b[j][1]);
17 for(int i=1;i<=n;i++)
18 for(int j=1;j<=n;j++)
19 {
20 if(b[i][0]%2+b[j][1]%2==0)continue;
21 else if(b[i][0]%2==1&&b[j][1]%2==0)c[i][0]++;
22 else if(b[i][0]%2==0&&b[j][1]%2==1)c[j][1]++;
23 else if(b[i][0]%2+b[j][1]%2==2)
24 {if(k==1){flag=false;break;}
25 else
26 {k++;n1=i;n2=j;}
27 }
28
29
30 }
31 for(int i=1;i<=n;i++)if(c[i][0]==n||c[i][1]==n)flag=false;
32 if(!flag)printf("Corrupt\n");
33 else if(k==1)printf("Change bit (%d,%d)\n",n1,n2);
34 else printf("OK\n");
35 }
36 return 0;}