http://acm.tju.edu.cn/toj/showp1169.html
这道题比较简单,先输入一个int型二维数组,然后分别对其每行每列求和,结果存入两个新的数组。再判断这两个数组中偶数的个数,偶数应该是只能为偶数个(以4*4为例,偶数的可能个数有:0 2 4 6 8)。分别对偶数个数的不同情况进行输出即可。
代码:
#include <stdio.h>
#include <stdlib.h>
int matrix[101][101];
int main(){
int N;
int horizon[101];
int vertical[101];
int x, y, judge_x, judge_y;
while(scanf("%d", &N) && N){
judge_x = 0;
judge_y = 0;
for(int i = 0; i < 101; i++){
horizon[i] = 0;
vertical[i] = 0;
}
for(int i = 0; i < N; i++){
for(int j = 0; j < N; j++){
scanf("%d", &matrix[i][j]);
//printf("%d ", matrix[i][j]);
//求每一横行的和
horizon[i] += matrix[i][j];
}
//printf("%d ", horizon[i]);
}
//求每一竖行的和
for(int j = 0; j < N; j++){
for(int i = 0; i < N; i++){
vertical[j] += matrix[i][j];
}
}
for(int i = 0; i < N; i++){
if(horizon[i] % 2 == 0)
judge_x++;
else
x = i+1;
if(vertical[i] % 2 == 0)
judge_y++;
else
y = i+1;
}
if(judge_x == N && judge_y == N) printf("OK\n");
else if(judge_x < N-1 || judge_y < N-1) printf("Corrupt\n");
else if(judge_x == N-1 && judge_y == N-1) printf("Change bit (%d,%d)\n", x, y);
}
return 0;
}