//妙解 #include<iostream> #include<set> using namespace std; int a[12][12]; int main() { int n; set<int> s; while(cin>>n&&n) { s.clear(); for(int i=0;i<n;i++) for(int j=0;j<n;j++) { cin>>a[i][j]; s.insert(a[i][j]); } //cout<<s.size()<<endl; if(s.size()!=n*n){ printf("No/n");continue;} int h[12],l[12],y=0,z=0; for(int i=0;i<n;i++) h[i]=0,l[i]=0; for(int i=0;i<n;i++) for(int j=0;j<n;j++) { h[i]+=a[i][j];//行 l[j]+=a[i][j];//列 if(i==j) y+=a[i][j];//右下 if(i+j==n-1) z+=a[i][j];//左上 } s.clear(); for(int i=0;i<n;i++) s.insert(h[i]),s.insert(l[i]); s.insert(y);s.insert(z); if(s.size()==1) printf("Yes/n"); else printf("No/n"); } system("pause"); return 0; } //我的解 #include<iostream> #include<set> using namespace std; int a[12][12]; int main() { int n; set<int> s; while(cin>>n&&n) { int key=1; s.clear(); for(int i=0;i<n;i++) for(int j=0;j<n;j++) { cin>>a[i][j]; s.insert(a[i][j]); } //cout<<s.size()<<endl; if(s.size()!=n*n) printf("NO/n"); else { int sum=0,sum2=0; for(int i=0;i<n;i++)// 行 { for(int j=0;j<n;j++) if(i==0) sum+=a[i][j]; else sum2+=a[i][j]; //printf("sum=%d sum2=%d/n",sum,sum2); if(i!=0) if(sum!=sum2) {printf("NO/n");key=0;break;} sum2=0; } sum2=0; if(key) for(int j=0;j<n;j++)// 列 { for(int i=0;i<n;i++) sum2+=a[i][j]; //printf("sum=%d sum2=%d/n",sum,sum2); if(sum!=sum2) {printf("NO/n");key=0;break;} sum2=0; } sum2=0; if(key) { for(int i=0,j=0;i<n,j<n;i++,j++)//右下 { sum2+=a[i][j]; } // printf("sum=%d sum2=%d/n",sum,sum2); if(sum!=sum2) {printf("NO/n");key=0;break;} } sum2=0; if(key) { for(int i=n-1,j=0;i>=0,j<n;i--,j++)//左上 sum2+=a[i][j]; //printf("sum=%d sum2=%d/n",sum,sum2); if(sum!=sum2) {printf("NO/n");key=0;break;} } if(key) printf("YES/n"); } } system("pause"); return 0; } http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1835 今天碰邪 邪神是YES or Yes NO or No 没有分清;