魔法矩阵

魔法矩阵

时间: 1ms        内存:128M

描述:

魔法矩阵是指任意大小的矩阵,每行每列以及两个主对角线的数字和都相等的矩阵。输入一个(3*3)的矩阵,判断该矩阵是否为魔法矩阵。如果是则输出“yes",否则输出”no"。

输入:

3*3的矩阵

输出:

yes 或者 no

示例输入:

6 1 8
7 5 3
2 9 4

示例输出:

yes

提示:

参考答案(内存最优[748]):

#include<stdio.h>
int main()
{
	int n[3][3],i,j;
	for(i=0;i<3;i++)
		for(j=0;j<3;j++)
		{
			scanf("%d",&n[i][j]);
		}
		int h[3],l[3],d1,d2;
		h[0]=n[0][0]+n[0][1]+n[0][2];
		h[1]=n[1][0]+n[1][1]+n[1][2];
		if(h[0]==h[1])
			h[2]=n[2][0]+n[2][1]+n[2][2];
		else
		{
			printf("no\n");
			return 0;
		}
		if(h[1]==h[2])
			l[0]=n[0][0]+n[1][0]+n[2][0];
		else
		{
			printf("no\n");
			return 0;
		}
		if(h[2]==l[0])
			l[1]=n[0][1]+n[1][1]+n[2][1];
		else
		{
			printf("no\n");
			return 0;
		}
		if(l[1]==l[0])
			l[2]=n[0][2]+n[1][2]+n[2][2];
		else
		{
			printf("no\n");
			return 0;
		}
		if(l[2]==l[1])
			d1=n[0][0]+n[1][1]+n[2][2];
		else
		{
			printf("no\n");
			return 0;
		}
		if(d1==l[2])
			d2=n[0][2]+n[1][1]+n[2][0];
		else
		{
			printf("no\n");
			return 0;
		}
		if(d1==d2)
		{			
			printf("yes\n");
			return 0;
		}
		else
			printf(" no\n");
		return 0;
}

参考答案(时间最优[0]):

#include <iostream>
#include <string.h>
using namespace std;

int main()
{
    int s[3][3];
    int sum[8];
    bool judge[7];
    memset(sum,0,sizeof(sum));
    for(int i=0; i<3; ++i)
        for(int j=0; j<3; ++j)
        {
            cin>>s[i][j];
            sum[i]+=s[i][j];
        }
    int c=3;
    for(int i=0; i<3; i++)
    {
        for(int j=0; j<3; ++j)
        {
            sum[c]+=s[j][i];
        }
        c++;
    }
    sum[6]=s[0][0]+s[1][1]+s[2][2];
    sum[7]=s[0][2]+s[1][1]+s[2][0];
    bool ok=1;
    for(int i=0; i<7; i++)
    {
        if(sum[i+1]-sum[i]==0)
            judge[i]=1;
        else
            judge[i]=0;
        ok&=judge[i];
    }
    if(ok)
        cout<<"yes";
    else
        cout<<"no";
    return 0;
}

题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。

点赞

发表评论

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