内存:64  时间:1

题目描述

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[20][20],Sum[40],Flag[1100];  
  
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[0];  
    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;  
}  

代码来源于互联网,仅供参考!