题目描述
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
参考代码
#include<stdio.h>
int main()
{
int n;
scanf("%d",&n);
while(n!=0)
{
int a[n][n],i,j,sum[2*n+2];
int is_magic=1;
int s,k,l;
for (i=0;i<(2*n+2);i++)
{
sum[i]=0;
}
for (i=0;i<n;i++)
{
for (j=0;j<n;j++)
{
scanf("%d",&a[i][j]);
}
}
for (i=0;i<n;i++)
{
for (j=0;j<n;j++)
{
sum[i]+=a[i][j];
}
}
for (j=0;j<n;j++)
{
for (i=0;i<n;i++)
{
sum[j+n]+=a[i][j];
}
}
for (i=0;i<n;i++)
{
sum[2*n]+=a[i][i];
}
for (i=n-1;i>=0;i--)
{
sum[2*n+1]+=a[i][i];
}
for (i=1;i<(2*n+2);i++)
{
// printf("sum[%d]=%dn",i,sum[i]);
if(sum[i-1]!=sum[i])
{
is_magic=0;
}
}
for (k=0;k<n;k++)
{
for (l=0;l<n;l++)
{
for (i=0;i<n;i++)
{
for (j=0;j<n;j++)
if(a[k][l]==a[i][j]&&i!=k&&j!=l)
{
is_magic=0;
}
}
}
}
if(is_magic==1)
{
printf("Yesn");
}else{
printf("Non");
}
scanf("%d",&n);
is_magic=1;
}
return 0;
}
解析
暂无