1. 程式人生 > >POJ 2260(模擬&貪心_B題)解題報告

POJ 2260(模擬&貪心_B題)解題報告

oid bre lose pla name spa 模擬 nbsp include

題目鏈接:http://poj.org/problem?id=2260

--------------------------------------------------------

題意:一種校驗碼,查出一位的比特差錯。

思路:校驗碼的原理與思路很明確,計算出每行每列的和,找出該和為奇數的點,該點所對應的x,y坐標即為所求。超過兩位輸出"Corrupt"。

代碼:

技術分享圖片
#include<cstdio>
#include<iostream>
using namespace std;
int N=0;
int main(void){
    while(scanf("%d",&N)){
        
if(N==0) break; const int n =N; int a[n][n]; for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ scanf("%d",&a[i][j]); // printf("%d",a[i][j]); } } int L[n]; int H[n]; for(int i=0;i<n;i++){ int suml = 0; for(int j=0;j<n;j++){ suml
+=a[i][j]; } L[i] = suml; //printf("%d",L[i]); } for(int i=0;i<n;i++){ int sumh=0; for(int j=0;j<n;j++){ sumh +=a[j][i]; } H[i] =sumh; //printf("%d",H[i]); } int Lf =-1; int Hf =-1; int cl=0;
int ch=0; for(int i=0;i<n;i++){ if(L[i]%2==1){ Lf =i; cl++; } if(H[i]%2==1){ Hf =i; ch++; } } if(cl>1||ch>1){ printf("Corrupt\n"); }else if(Lf==-1&&Hf==-1){ printf("OK\n"); }else{ printf("Change bit (%d,%d)\n",Lf+1,Hf+1); } } return 0; }
View Code

POJ 2260(模擬&貪心_B題)解題報告