用C语言输出“魔方阵”
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用C语言输出“魔方阵”相关的知识,希望对你有一定的参考价值。
魔方阵就是指满足每一行、每一列和对角线之和均相等的方阵!要求输出可满足任意阶数的!
这个是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");
参考技术A 奇阶幻方
当n为奇数时,我们称幻方为奇阶幻方。
偶阶幻方
当n为偶数时,我们称幻方为偶阶幻方。当n可以被4整除时,我们称该偶阶幻方为双偶幻方;当n不可被4整除时,我们称该偶阶幻方为单偶幻方。
看看参考资料里的百科
里面有代码追问
谢啦!
参考资料:http://baike.baidu.com/view/5058.htm
参考技术B #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;
这个是三阶的追问
存在偶数阶的魔方阵吗?
4N魔方阵
/* 4N魔方阵 */ #include<stdio.h> #include<stdlib.h> #define N 8 int main(void){ int i, j; int square[N+1][N+1] = {0}; for(j = 1; j <= N; j++){ for(i = 1; i <= N; i++){ if(j%4 == i%4 || (j%4 + i%4) == 1){ square[i][j] = (N+1-i) * N -j + 1; }else{ square[i][j] = (i-1) * N + j; } } } for(i = 1; i <= N; i++){ for(j = 1; j<= N; j++){ printf("%2d ", square[i][j]); } printf("\\n"); } return 0; }
运行结果:
以上是关于用C语言输出“魔方阵”的主要内容,如果未能解决你的问题,请参考以下文章