#include<stdio.h>
odd_number(int x){
int a[700][700]={0};
int sum=0,i=0,j=x/2,k;
a[i][j]=1;
for(k=2;k<x*x+1;k++){
--i;--j;
if(i<0)i=x-1;
if(j<0)j=x-1;
if(a[i][j]!=0){
i=i+2;
++j;
if(i>x-1)i=1;
if(j>x-1)j=0;
}
a[i][j]=k;
}
for(i=0;i<x;i++){
for(j=0;j<x;j++){printf("%3d\t",a[i][j]);}
printf("\n\n\n\n");
}
for(i=0;i<x;i++){
sum=0;
for(j=0;j<x;j++){
sum+=a[i][j];
}
printf("第%d行和为%d\n",(i+1),sum);
}
for(j=0;j<x;j++){
sum=0;
for(i=0;i<x;i++){
sum+=a[i][j];
}
printf("第%d列和为%d\n",(j+1),sum);
}
i=0;sum=0;
for(j=0;j<x;j++){
sum+=a[i][j];
++i;
}
printf("左上右下对角线和为%d\n",sum);
i=0;sum=0;
for(j=x-1;j>=0;j--){
sum+=a[i][j];
++i;
}
printf("左下右上对角线和为%d\n",sum);
}
int main(){
int x;
printf("请问你要查看的幻方为几阶幻方?(暂时只支持奇数)\n");
scanf("%d",&x);
printf("- - - - - - - - - - - - - - - - - - - 分割线- - - - - - - - - - - - - - - - - - - \n");
if(x%2==1)odd_number(x);
else {
if(x%4==0)special_even(x);
else even_number(x);
}
return 0;
}
先是用了c实现的
后来百度了python的二维数组怎么定义和赋值再转化为python实现
x1=input("please inout an odd number:")
x=int(x1)
a = [([0] * x)for i in range(x)]
i=0;j=1
a[i][j]=1
for k in range(2,x*x+1):
i=i-1;j=j-1
if(i<0):i=x-1
if(j<0):j=x-1
if(a[i][j]!=0):
i=i+2
j=j+1
if(i>x-1):i=1
if(j>x-1):j=0
a[i][j]=k
for i in range(0,x):
for j in range(0,x):
print(a[i][j] ,end=' ')
print("\n")
print("****************以下为幻方的验证*******************\n")
for i in range(0,x):
sum=0
for j in range(0,x):
sum+=a[i][j]
print("The sum of column %d is:%d"%(i+1,sum))
for j in range(0,x):
sum=0
for i in range(0,x):
sum+=a[i][j]
print("The sum of row %d is:%d"%(j+1,sum))
i=0;sum=0;
for i in range(0,x):
sum+=a[i][j]
i=i+1
print("左上右下对角线和为:",sum)
i=0;sum=0;
for i in range(0,x):
sum+=a[i][j]
i=i+1
print("左下右上对角线和为:",sum)