### 题目描述

In recreational mathematics, a magic square of n-degree is an arrangement of n2 numbers, distinct integers, in a square, such that the n numbers in all rows, all columns, and both diagonals sum to the same constant. For example, the picture below shows a 3-degree magic square using the integers of 1 to 9. Given a finished number square, we need you to judge whether it is a magic square.

### 输入

The input contains multiple test cases.

The first line of each case stands an only integer N (0 < N < 10), indicating the degree of the number square and then N lines follows, with N positive integers in each line to describe the number square. All the numbers in the input do not exceed 1000. A case with N = 0 denotes the end of input, which should not be processed.

### 输出

For each test case, print “Yes” if it’s a magic square in a single line, otherwise print “No”.

2
1 2
3 4
2
4 4
4 4
3
8 1 6
3 5 7
4 9 2
4
16 9 6 3
5 4 15 10
11 14 1 8
2 7 12 13
0

No
No
Yes
Yes

zoj2835

### 代码如下

``````#include<stdio.h>
#include<string.h>
int Map,Sum,Flag;

int Judge(int N)
{
int i,j;
memset(Sum,0,sizeof(Sum));
memset(Flag,0,sizeof(Flag));
for(i = 0; i < N; i++)
for(j = 0; j < N; j++)
{
if(!Flag[Map[i][j]])
Flag[Map[i][j]] = 1;
else
return 0;
}
for(i = 0; i < N; ++i)
{
for(j = 0; j < N; ++j)
Sum[i] += Map[i][j];
}
for(i = 0; i < N; ++i)
{
for(j = 0; j < N; ++j)
Sum[i+N] += Map[j][i];
}
for(i = 0; i < N; ++i)
Sum[N+N] += Map[i][i];
for(i = 0; i < N; ++i)
Sum[N+N+1] += Map[i][N-1-i];
int tmp = Sum;
for(i = 0; i <= 2*N+1; ++i)
if(Sum[i] != tmp)
return 0;
return 1;
}

int main()
{
int N;
int i,j;
while(~scanf("%d",&N) && N)
{
for(i = 0; i < N; ++i)
for(j = 0; j < N; ++j)
scanf("%d",&Map[i][j]);
if(Judge(N))
printf("Yes\n");
else
printf("No\n");
}

return 0;
}  ``````