若是凉夜已成梦

青春里 总有些事情要努力去做 总有些梦想要拼命去追。


  • 运维

  • 前端

  • 编程

  • 随笔

  • hust-oj

1643: Magic Square

发表于 2017-10-06   |   分类于 HUSTOJ   |   阅读次数 1,528

题目描述

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;
}

解析

暂无

hustoj

发表评论 取消回复

邮箱地址不会被公开。 必填项已用*标注

*
*


hoxis wechat
著作权归作者所有
站点更新说明
  • 文章目录
  • 站点概览
若是凉夜已成梦

若是凉夜已成梦

青春里 总有些事情要努力去做 总有些梦想要拼命去追。

1904 日志
6 分类
12 标签
RSS
weibo github twitter facebook

友情链接

Dreams孤独患者 Skip 原站点
© 2017 若是凉夜已成梦
Powered by WordPress | 已运行
Theme By NexT.Mist