题目描述
给定n*n由0和1组成的矩阵,如果矩阵的每一行和每一列的1的数量都是偶数,则认为符合条件。 你的任务就是检测矩阵是否符合条件
输入
多组测试数据;
对于每组数据:
输入n + 1行,第1行为矩阵的大小n(0 < n <= 100),以下n行为矩阵的每一行的元素,元素之间以一个空格分开。
输出
如果矩阵符合条件,则输出OK;
否则,输出Corrupt。
样例输入
4
1 0 1 0
0 0 0 0
1 1 1 1
0 1 0 1
样例输出
OK
时空限制
1000ms/10000kb
#include <stdio.h>
int main(){
int n,i,j,num_row,num_col;
while (scanf("%d", &n) != EOF){
// 定义存放输入的二维数组
int array[n][n];
int flag = 0;
//下面的嵌套循环是用来输入一个 n*n 的二维数组
for(i=0;i<n;i++){
for(j=0;j<n;j++){
scanf("%d",&array[i][j]);
}
}
// 开始遍历二维数组中的每一个数(数的取值要么是 0 ,要么是 1)
for(i=0;i<n;i++){
// num_row 存放的是每一行的数字相加
num_row = 0;
// num_row 存放的是每一列的数字相加
num_col = 0;
for(j=0;j<n;j++){
// 下面两行相当于统计 1 的数量,如果 array[i][j] 是 0,相当于没加,如果是 1,相当于加 1
num_row += array[i][j];
num_col += array[j][i];
}
// 判断行和列中,数字相加是否都是2的倍数,如果有一个不是就将 flag 变量置为 1
if(num_row % 2 != 0 || num_col % 2 != 0){
flag = 1;
printf("Corrupt\n");
// 跳出最外层循环,结束遍历
break;
}
}
// 如果 flag 没改变值,说明二维数组中的数字每一行,每一列中 1 的个数都是偶数,则输出 OK
if(flag == 0){
printf("OK\n");
}
}
return 0;
}