设矩阵map[][],其中row[i] 表示i行和 ,col[j] 表示j列的和,r表示和为奇数的行个数,c表示和为奇数的列个数,di dj 表示最后和为奇数的序列号。
判断矩阵是否是奇偶均势矩阵:
if (r==c==0) 满足条件
else if (r==c==1) 可以改变满足
else “Corrupt”
代码如下:
#include <string.h>
#include <stdio.h>
const int max=101;
int row[max],col[max],r,c,di,dj;
void read (int n,int map[][max]){
for (int i=0;i<n;i++)
for (int j=0;j<n;j++)
scanf ("%d",&map[i][j]);
for (int i=0;i<n;i++){
for (int j=0;j<n;j++){
row[i] += map[i][j];
col[i] += map[j][i];
}
if (row[i] & 1) r++,di=i;
if (col[i] & 1) c++,dj=i;
}
}
int main (){
int n,map[max][max];
while (~scanf ("%d",&n) && n){
memset (row,0,sizeof (row));
memset (col,0,sizeof (col));
r=c=0; //行数和列数和为奇数的个数
read (n,map);
// printf ("r=%d,c=%d\n",r,c);
if (r==c && r==0)
puts ("OK");
else if (r==c && r==1)
printf ("Change bit (%d,%d)\n",di+1,dj+1);
else
puts ("Corrupt");
}
return 0;
}