c语言幻方

来源:百度知道 编辑:UC知道 时间:2024/06/05 15:36:36
这个是判断幻方的

#include<stdio.h>
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
if(n==0) break;
int i,j,sumi,sumj,a[10][10],s1=0,s2=0,f=1;
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
scanf("%d",&a[i][j]);
}
}
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
if(j==i) s1=s1+a[i][j];
if(i+j==n+1) s2=s2+a[i][j];
}
}
if(s1!=s2) f=0;
else
{
for(i=1;i<=n;i++)
{
sumi=0;sumj=0;
for(j=1;j<=n;j++)
{
sumi=sumi+a[i][j];
sumj=sumj+a[j][i];
}
if(sumi!=s1||sumj!=s2) {f=0;break;}
}
}
if(f==1) printf("Yes\n");
else printf("No\n");
}
return 0;
}

我的解答

题目如下:Problem Description

n阶幻方是由前n*n个自然数组成的一个n阶方阵(每个自然数只

1.每个自然数只出现一次,没有考虑
2.数组下标从0开始
3.
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
if(j==i) s1=s1+a[i][j];
if(i+j==n+1) s2=s2+a[i][j];
}
}
这样没必要
for(i=0;i<n;i++)
{
s1+=a[i][i];
s2+=a[i][n-1-i];
}