我是靠谱客的博主 能干麦片,最近开发中收集的这篇文章主要介绍B Error correction,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

题目描述

A boolean matrix has the parity property when each row and each column has an even sum, i.e. contains an even number of bits which are set. Here's a 4 x 4 matrix which has the parity property: 
1 0 1 0

0 0 0 0

1 1 1 1

0 1 0 1

The sums of the rows are 2, 0, 4 and 2. The sums of the columns are 2, 2, 2 and 2. 
Your job is to write a program that reads in a matrix and checks if it has the parity property. If not, your program should check if the parity property can be established by changing only one bit. If this is not possible either, the matrix should be classified as corrupt. 

Input

The input will contain one or more test cases. The first line of each test case contains one integer n (n<100), representing the size of the matrix. On the next n lines, there will be n integers per line. No other integers than 0 and 1 will occur in the matrix. Input will be terminated by a value of 0 for n.

Output

For each matrix in the input file, print one line. If the matrix already has the parity property, print "OK". If the parity property can be established by changing one bit, print "Change bit (i,j)" where i is the row and j the column of the bit to be changed. Otherwise, print "Corrupt".
Sample Input
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

Sample Output

OK
Change bit (2,3)
Corrupt

题目原网站:http://poj.org/problem?id=2260

思路:分3种情况

 1.行和或列和中有两个或两个以上为奇数,则输出corrupt。

2.行和与列和均为偶数,输出OK。

3. 行和与列和均只有一个为奇数,则只需改动该行与该列所在的数即可。

代码如下:

 #include<iostream>
#include<stdio.h>
using namespace std;
int main(void) {
	int n;
	while (cin >> n&&n) {
		int *sumc = new int[n], *sumr = new int[n], c, r, oddc = 0, oddr = 0;
		for(int i=0;i<n;i++)
			sumc[i]=0,sumr[i]=0;
		int **a = new int*[n];
		for (int i = 0; i < n; i++)
			a[i] = new int[n];
		for (int i = 0; i < n; i++)
			for (int j = 0; j < n; j++)
			{
				cin >> a[i][j];
				sumr[i] += a[i][j];
			}
		for (int j = 0; j < n; j++)
			for (int i = 0; i < n; i++)
				sumc[j] += a[i][j];
		for (int i = 0; i < n; i++)
		{
			if (sumr[i] & 1) oddr++, r = i;
			if (sumc[i] & 1) oddc++, c = i;
		}
		if (oddr > 1 || oddc > 1) cout << "Corrupt" << endl;
		if (oddr == 1 && oddc == 1) printf("Change bit (%d,%d)n",r+1,c+1);
		if (oddr == 0 && oddc == 0) printf("OKn");
	}
	return 0;
}

最后

以上就是能干麦片为你收集整理的B Error correction的全部内容,希望文章能够帮你解决B Error correction所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(40)

评论列表共有 0 条评论

立即
投稿
返回
顶部