错误纠正(Error Correction)

来源:互联网 发布:js 仪表盘 编辑:程序博客网 时间:2024/05/07 06:38

原题链接: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");elseSystem.out.println("Corrupt");}}


 

原创粉丝点击