zoj 1949 Error Correction(题号是建国1949哈~~)

这题纠结了不少时间。。。思路没理清吧。不难这题。把情况想清楚就OK了。

 

1、行列和不能整除2的个数大于2的,输出Corrupt;

2、没有个数等于1的情况,等于0输出OK;

3、如果等于2 ,看是否只是两个行或者两个列和,如果是,输出Corrupt;

4、找除2余1的行和列,输出行列序号就OK拉~

 

#include <iostream> using namespace std; int main(void) { int n,i,j,count,y,tempi,tempj; int dig[101][101]; int sum[2][1001]; while(cin>>n && n) { count = 0; y = 1;tempi = -1; memset(sum,0,sizeof(sum)); for(i=0; i<n; i++) for(j=0; j<n; j++) { cin>>dig[i][j]; sum[0][i] += dig[i][j]; } for(i=0; i<n; i++) for(j=0; j<n; j++) sum[1][i] += dig[j][i]; for(i=0; i<n; i++) if(sum[0][i]%2!=0 || sum[1][i]%2!=0) { count++; } if(count == 0) { cout<<"OK"<<endl; continue; } if( count > 2 ) { cout<<"Corrupt"<<endl; continue; } tempi = 0; for(i=0; i<n; i++) if(sum[0][i]%2 != 0) tempi++; if(tempi % 2 == 0) { cout<<"Corrupt"<<endl; continue; } for(i=0; i<n; i++) if(sum[0][i]%2 != 0) { tempi = i; break; } for(j=0; j<n; j++) if( sum[1][j]%2!=0 ) { cout<<"Change bit ("<<tempi+1<<","<<j+1<<")"<<endl; break; } } system("pause"); return 0; }

你可能感兴趣的:(zoj 1949 Error Correction(题号是建国1949哈~~))