中易网

用C语言输出“魔方阵”

答案:4  悬赏:0  
解决时间 2021-11-09 03:12
  • 提问者网友:南佳人~
  • 2021-11-08 04:02
魔方阵就是指满足每一行、每一列和对角线之和均相等的方阵!要求输出可满足任意阶数的!
最佳答案
  • 二级知识专家网友:甜野猫
  • 2021-11-08 05:12
这个是17以内奇数阶和四阶的!!!
#include<stdio.h>
void main()
{
int x,i,j,fl,k=0,a[18][18]={0};
printf("请输入层数:");
scanf("%d",&x);
if((x!=4)&&(x%2==0)||(x<0)&&(x>18))
fl=0;
else if(x==4)
{
for(i=0;i<x;i++)
{
for(j=0;j<x;j++)
{
k+=1;
a[i][j]=k;
}
}
for(i=0;i<x;i++)
for(j=0;j<x;j++)
{
if(((i==j)&&(i<2))||((j==x-i-1)&&(j>2)))
{
k=a[i][j];a[i][j]=a[x-i-1][x-j-1];a[x-i-1][x-j-1]=k;
}
}
}
else
{
i=0;
j=x/2;
a[0][j]=1;
for(k=2;k<=x*x;k++)
{
i=i-1;
j=j+1;
if(i<0&&j>x-1)
{
i=i+1;
j=j-1;
}
else
{
if(i<0)i=x-1;
if(j>x-1)j=0;
}
if(a[i][j]==0)
a[i][j]=k;
else
{
i=i+2;
j=j-1;
a[i][j]=k;
}
}
}
if(fl==0)
printf("无此魔方阵!\n");
else
{
for(i=0;i<x;i++)
{
for(j=0;j<x;j++)
printf("%4d",a[i][j]);
printf("\n");
}
}
}
全部回答
  • 1楼网友:走,耍流氓去
  • 2021-11-08 07:28
奇阶幻方   当n为奇数时,我们称幻方为奇阶幻方。 偶阶幻方   当n为偶数时,我们称幻方为偶阶幻方。当n可以被4整除时,我们称该偶阶幻方为双偶幻方;当n不可被4整除时,我们称该偶阶幻方为单偶幻方。 看看参考资料里的百科 里面有代码
  • 2楼网友:懂得ㄋ、沉默
  • 2021-11-08 06:55
#include"stdio.h" #define n 3 main() {int s,i,j,m,oi,oj,a[n][n]={0}; s=0; i=0; j=n/2; a[i][j]=1; for(m=2;m<=9;m++) {oi=i; oj=j; if(i==0) i=n-1; else i=i-1; j=(j+1)%n; if(a[i][j]!=0) {j=oj; i=(oi+1)%n; } a[i][j]=m; } printf("\n"); for(i=0;i<n;i++) {for(j=0;j<n;j++) printf("%d ",a[i][j]); printf("\n"); } for(i=0;i<n;i++) {for(j=0;j<n;j++) s=s+a[i][j]; printf("%d,",s); s=0; } } 这个是三阶的
  • 3楼网友:一只傻青衣
  • 2021-11-08 05:31
n个循环嵌套来做我还做不来呢。。。但至少用一个循环来赋值,一个循环来输出,这两个循环是不嵌套的。。这是用“右上方”原则做的,判断倒是比较多,如果要求更多阶的魔方阵的话就把#define n 3这句话里面的3改成别的数字。 #include #define n 3 void main() {int a[n][n]={0},i,j,k; i=0; j=n/2; a[i][j]=1; for(k=2;k<=n*n;k++) {i=i-1; j=j+1; if(i<0&&j==n) {i=i+2;j=j-1;} else {if(i<0) i=n-1; if(j==n) j=0; } if(a[i][j]==0) a[i][j]=k; else {i=i+2; j=j-1; a[i][j]=k;} } printf("%d阶魔方阵为:\n",n); for(i=0;i
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息!
大家都在看
推荐信息