魔法矩阵
时间: 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;
}
题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。
