当前位置: 代码迷 >> C语言 >> "魔方阵"问题
  详细解决方案

"魔方阵"问题

热度:429   发布时间:2007-10-15 18:48:15.0
"魔方阵"问题
3阶魔方阵:
      8 1 6
      3 5 7
      4 9 2
要求用C语言编程得到由1到n*n的自然数构成的魔方阵.请教高手,请给出源代码.
搜索更多相关的解决方案: 魔方阵  

----------------解决方案--------------------------------------------------------
这是最近我看到的代码
#include <stdio.h>
void main()
{
int array[16][16];
int i,j,k,m,n;
m=1;
while(m==1)
{
printf("请输入n(0<n<=15),n是奇数)\n");
scanf("%d",&n);
if((n!=0)&&(n<=15)&&(n%2!=0))
{
printf("矩形阶数是%d\n",n);
m=0;
}
}
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
array[i][j]=0;
j=n/2+1;
array[1][j]=1;
for(k=2;k<=n*n;k++)
{
i=i-1;
j=j+1;
if((i<1)&&(j>n))
{
i=i+2;
j=j-1;
}
else
{
if(i<1)
i=n;
if(j>n)
j=1;
}
if(array[i][j]==0)
array[i][j]=k;
else
{
i=i+2;
j=j-1;
array[i][j]=k;
}
}
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
printf("%5d",array[i][j]);
printf("\n");
}
}

----------------解决方案--------------------------------------------------------

最近在这个论坛刚看到的

程序代码:

#include <stdio.h>
#define MAX 101
int main(void)
{
long nList[MAX][MAX],n=0,n1,n2;
while(!(n&1)){scanf(\"%d\",&n);} //输入阶数
for(n2=n*n,n1=0;n1<n2;n1++) //计算生成
{
nList[(n1*(n-1)+(n1/n)*2)%n][(n1+(n>>1)-n1/n)%n]=n1+1;
}
for(n2=0;n2<n;n2++) //结果输出
{
for(n1=0;n1<n;n1++)printf(\"%4d\",nList[n2][n1]);
printf(\"\n\");
}
return 0;
}


注:不存在超过4阶的偶数阶魔方阵


----------------解决方案--------------------------------------------------------

谢谢两位啊,我好好研究研究


----------------解决方案--------------------------------------------------------
  相关解决方案