原题链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1949
1.题目
一个布尔矩阵有一种奇偶性,即该矩阵所有行和所有列的和都是一个偶数。下面这个4*4的矩阵就是具有奇偶性:
1 0 1 0
0 0 0 0
1 1 1 1
0 1 0 1
它所有行的和是 2 , 0 , 4 和2.。 它的所有列的和是2,2, 2 ,2。
你的工作就是编写一个程序,读入这个矩阵并检查它是否具有奇偶性。如果没有,你的程序应当再检查一下它是否可以通过
修改一位(把0修改为1,或把1修改为0)来使它具有奇偶性。如果不可能,这个矩阵就被认为是破坏的(Corrupt);
2. 输入描述
输入包含多个测试案例。每个测试案例的第一行是一个整数n(n<100),代表该矩阵的大小。在接下来的n行中,每行有n个整数
矩阵是由0或1构成的。n是0时,表示输入的结束。
3.输出描述
对于输入文件中的每个矩阵,打印一行。如果这个矩阵具有奇偶性,那么打印“OK”。如果奇偶性能通过只修改矩阵中的一位
来建立,那么打印“Change bit (i , j)”,这里i和j是被修改的这位的行号和列号。否则打印“Corrupt”。
4.输入样例
4
1 0 1 0
0 0 0 0
1 1 1 1
0 1 0 1
4
1 0 1 0
0 0 1 0
1 1 1 1
0 1 0 1
4
1 0 1 0
0 1 1 0
1 1 1 1
0 1 0 1
0
package OnlineDesign;
import java.util.Scanner;
public class MistakeCorrect {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int n = input.nextInt();
int num[][] = new int[n][n];
int row_num[] = { 2, 0, 4, 2 };
int row = 0; // 可修改的行
int col = 0; // 可修改的列
int m = 0, p = 0;
int row_value = 0;// 每行的和
int col_value = 0;// 每列的和
int count_row = 0;// 行错误的次数
int count_col = 0;// 列错误的次数
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++)
num[i][j] = input.nextInt();
}
for (m = 0; m < n; m++) {
row_value = 0;
col_value = 0;
for (p = 0; p < n; p++) {
row_value += num[m][p];
col_value += num[p][m];
}
if (row_value != row_num[m]) {
row = m;
count_row++;
}
if (col_value != 2) {
col = m;
count_col++;
}
}
if (count_row == 1 && count_col == 1)
System.out.println("Change bit(" + (row + 1) + "," + (col + 1)
+ ")");
else if (count_row == 0 && count_col == 0)
System.out.println("Ok");
else
System.out.println("Corrupt");
}
}