Description
1 0 1 0 0 0 0 0 1 1 1 1 0 1 0 1
Input
Output
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
/* 题目意思不难理解,就是要每行每列加起来都是偶数,就输出OK 如果不是,通过改变其中的一个值能够达到其要求就输出改变那个坐标 否则就输出Corrupt 我的思路是将每行的和与每列的和都别丢入数组中,如果其中某个数组的奇数超过 1个,那肯定就不行了 如果都是偶数就不用说了 如果刚好每个数组都有一个奇数,输出者两个奇数所在地就是改变的坐标 比如 1 0 1 0 0 0 1 0 1 1 1 1 0 1 0 1 行之和数组:b : 2 1 4 2 列之和数组:C :2 2 3 2 所以改变的坐标是(2,3) */ #include <iostream> using namespace std; int main() { int a[105][105],b[105],c[105],i,j,n,sum; while(cin >> n,n) { for(i = 0; i<n; i++) { for(j = 0; j<n; j++) { cin >> a[i][j]; } } int cnt = 0; for(i = 0; i<n; i++) { b[i] = 0; for(j = 0; j<n; j++) { b[i]+=a[i][j]; } } for(i = 0; i<n; i++) { c[i] = 0; for(j = 0; j<n; j++) { c[i]+=a[j][i]; } } int sum1=0,sum2 = 0,flag1,flag2; for(i = 0; i<n; i++) { if(b[i]%2) { sum1++; flag1 = i; } } for(i = 0; i<n; i++) { if(c[i]%2) { sum2++; flag2 = i; } } if(sum1 > 1 || sum2>1) cout << "Corrupt" << endl; else if(!sum1 && !sum2) cout << "OK" << endl; else cout << "Change bit (" << flag1+1 << "," << flag2+1 << ")" << endl; } return 0; }