错误纠正(Error Correction)

原题链接: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");

	}

}


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值