Magic Square

这道题是比较简单的,三个字——找规律。思路也应该是比较清晰的,下面,我们先看一下题目吧。

Description

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…….

Input

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.

Output

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

Sample Input

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

Sample Output

No

No

Yes

Yes

先解释一下大体意思,就是先给你一个数字n,然后是n*n的二维数组,然后让你比较任意列、行、对角线的和是否相等。

从题意中我们就知道代码要分4部分了,1.行的和;2.列的和;3.主对角线的和;4.辅对角线的和。

特别注意

特殊处理n=1的情况;

这是我的代码

#include<stdio.h>
#include<string.h>
int main()
{
    int n, i, j, flag, sum1[1000], sum2[1000], a[10][10], sum3, sum4, x;
    while(~scanf("%d", &n))
    {
        memset(sum1, 0, sizeof(sum1));
        memset(sum2, 0, sizeof(sum2));
        flag=0;
        sum3=0;
        sum4=0;
        if(n==0)
        {
            break;
        }
        else if(n==1)
        {
            scanf("%d", &x);
            printf("Yes\n");
            continue;
        }
        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++)
            {
                if(a[i][j]==a[0][0])
                {
                    flag=3;
                    break;
                }
                else
                {
                    flag=0;
                }
            }
        }
        for(i=0; i<n; i++)
        {
            for(j=0; j<n; j++)
            {
                sum1[i]+=a[i][j];
            }
        }
        for(i=0;i<n;i++)
        {
            if(sum1[i]!=sum1[0])
            {
                flag=3;
                break;
            }
        }
        for(i=0; i<n; i++)
        {
            for(j=0; j<n; j++)
            {
                sum2[i]+=a[j][i];
            }
        }
        for(i=0;i<n;i++)
        {
            if(sum2[i]!=sum2[0])
            {
                flag=3;
                break;
            }
        }
        for(i=0; i<n; i++)
        {
            sum3+=a[i][i];
        }
        for(i=0; i<n; i++)
        {
            sum4+=a[i][n-i-1];
        }
        if(flag==3)
        {
            printf("No\n");
        }
        else
        {
            for(i=0; i<n; i++)
            {
                if(sum1[i]!=sum2[i])
                {
                    flag=4;
                    break;
                }
                else
                {
                    flag=0;
                }
            }
            if((flag==0)&&(sum3==sum4))
            {
                printf("Yes\n");
            }
            else
            {
                printf("No\n");
            }
        }
    }
    return 0;
}

代码看着有点长,但是思路知道了,作对就so easy了。

时间: 2024-11-03 21:57:17

Magic Square的相关文章

IOI&#39;96 Magic Square解题报告

IOI‘96 Magic Square(魔版) 题目由JerryXie翻译. Magic Square(msqaure.cpp/c/pas) [问题描述] 在魔方的成功之后,卢比克先生发明了它的二维版本,叫做魔版.它是一个由八个方块组成的表格. 在本题中我们认为每一个方块都有不同的颜色,这些颜色将会用1~8共8个整数表示.一个表格的状态将会以一个由颜色组成的序列表示,顺序是从表格左上角沿顺时针方向给出.比如上面这个表格,序列为(1,2,3,4,5,6,7,8),这被称作初始状态. 魔版有三种基本

Sicily 1302 Magic Square (数论)

链接:http://soj.me/1302 题目中有图和表格,所以就不把题目信息列出来了,打开链接直接看就行了... 分析: 从填幻方的过程,可以判断一下几点: 1>.幻方的每一列都是向下发展的: 2>.填入的前n个数都刚好是每一列第一个填入的数: 从这两点可以推出下面几点: (1). 每一列的发展是平面的(即每一列的个数是一样的,特别的,只有一列少一): (2). 右下角那个数肯定是填入的最大的: (3). 当我们填入到右下角的时候,每一列的个数都刚好是n/2(注意n是奇数,这里的除是整除)

Little Elephant and Magic Square

Little Elephant loves magic squares very much. A magic square is a 3?×?3 table, each cell contains some positive integer. At that the sums of integers in all rows, columns and diagonals of the table are equal. The figure below shows the magic square,

CodeForces-259B]Little Elephant and Magic Square

Little Elephant loves magic squares very much. A magic square is a 3 × 3 table, each cell contains some positive integer. At that the sums of integers in all rows, columns and diagonals of the table are equal. The figure below shows the magic square,

codeforces 711B - Chris and Magic Square

题目链接:http://codeforces.com/problemset/problem/711/B 题目大意: 输入 n ,输入 n*n 的矩阵,有一个占位 0 , 求得将 0 位置换成其他的整数 使得矩阵 行列斜 和全部相等. 代码状态: 一把辛酸泪

CF 711B - Chris and Magic Square

挺简单的一道题,但是做的时候没想好就开始写代码了,导致迷之WA,还是要多练习啊. #include <iostream> #include <cstdio> #include <algorithm> #include <queue> #include <set> #define LL long long int using namespace std; LL Map[505][505]; int main() { cin.sync_with_st

CodeForces 711B Chris and Magic Square (暴力,水题)

题意:给定n*n个矩阵,其中只有一个格子是0,让你填上一个数,使得所有的行列的对角线的和都相等. 析:首先n为1,就随便填,然后就是除了0这一行或者这一列,那么一定有其他的行列是完整的,所以,先把其他的算出来,然后再作差就算这个数了, 然后再去验证其他的对不对就好了.除了n为1,其他的都是唯一解应该.或者没有. 代码如下: #pragma comment(linker, "/STACK:1024000000,1024000000") #include <cstdio> #i

XMU1016 Magic Square【幻方构造】

题目链接: http://acm.xmu.edu.cn/JudgeOnline/problem.php?id=1016 题目大意: 给你一个整数N,然后输出一个N阶幻方. 解题思路: 关于幻方.搜索肯定超时. 可是我们能够直接构造一个幻方. 就是依据奇数阶(2*M+1)幻方. 单偶数阶(4*M+2)幻方.双偶数阶(4*M)幻方等不同的构造方法来构造. 參考博客:http://blog.csdn.net/u012317281/article/details/38051185 1 奇数阶 (2*M+

codeforces #369div2 B. Chris and Magic Square

题目:在网格某一处填入一个正整数,使得网格每行,每列以及两条主对角线的和都相等 分析:题目不难,找到要填的那个数填进去,然后循环比较每行每列以及对角线的和是否相等,题目提交上去卡了几次要注意几点 注意:1.答案数据范围1<=x<=1e18,要用 long long 2.特殊情况,n==1时,由于一定有要填的数,所以一定有解 3.反正就是要注意看清楚题目和数据边界情况处理啦 1 #include<iostream> 2 #include<cstdio> 3 #includ