题目描述
布尔矩阵具有奇偶均势特性, 当且仅当每行、每列的元素总和为偶数。
例如
1 0 1 0
0 0 0 0
1 1 1 1
0 1 0 1
每行每列的元素总和皆为偶数, 即具有奇偶均势特性。
现输入一个矩阵, 判断是否具有奇偶均势特性。若否那么判断可否通过修改某一位置上的数(0变1或1变0), 使得该布尔矩阵具有奇偶均势特性。
行则输出改变元素的坐标,否则为被破坏。
输入
第一行为整数n(1 ≤ n ≤ 100).
接下来n行, 每行n个数(0 or 1)。
输出
如有奇偶均势特性则输出“OK”, 若可通过修改一位请输出“Change bit(i, j)”, i,j 为修改位置的横纵坐标。若不行则输出"Corrupt"。(注意行列从1开始, 并且逗号后面有个空格。
#include <stdio.h>
int main()
{
int n;
scanf("%d",&n);
int a[n][n];
int i,j;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
scanf("%d",&a[i][j]);
}
}
int sum=0,x=0,y=0,xi,yj;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
// printf("%d\n",a[i][j]);
sum+=a[i][j];
}
if(sum%2==1)
{
x++;
xi=i;
}
sum=0;
}
for(j=0;j<n;j++)
{
for(i=0;i<n;i++)
{
sum+=a[i][j];
}
if(sum%2==1)
{
y++;
yj=j;
}
sum=0;
}
if(x==0&&y==0)
puts("OK");
else if(x==1&&y==1)
printf("Change bit(%d,%d)",xi+1,yj+1);
else
puts("Corrupt");
return 0;
}