之前有玩过类似这的游戏,但不知道有这么一规则,还能推算的,挺有意思。
你的程序少了些判断,你知道规则,想法也是正确的,就是可能发生错误没想到位。
有意思的东东就来编一下,改了很多,看一下是不是这样子:
# include <stdio.h>
main()
{
int i,j,n,k,a[100][100]={0};
/*把a数组所以元素初始0*/
while(1)
/*如输入值”小于3或大于99或初2余数为0“的数继续循环输入*/
{
printf("Please input n(odd,3~99):\n");
scanf("%d",&n);
if(n<3||n>99||n%2==0)
{
printf("error!\n");
}
else
break;
}
for(i=0,j=n/2,k=1;k<=n*n;k++) /*循环n乘n次断,i和j作下标,k作要放的数值*/
{
if(a[i][j]==0)
/*判断要放的a[i][j]位置是否为0,0代表可放入k值,非0代表不可放入k值*/
{
a[i][j]=k;
/*放入k值*/
}
else
/*要放的a[i][j]位置不为0时,反回之前存放的位置*/
{
if(i==n-1)
/*这里判断如i是最后一行时,让i跑回第一行*/
i=0;
else
i++;
/*之前i是减1行,现在反回去i就加1*/
if(j==0)
/*判断如j是第一列时,让j反回最后一列*/
j=n-1;
else
j--;
/*之前j是加1列,现在反回去j就减1*/
if(i==n-1)
i=-1;
i++;
/*把要存k值的位置往下移一行*/
a[i][j]=k;
/*放入k值*/
}
if(i==0)
/*-------------*/
i=n-1;
/*这里是放入k值后,如i是第一行,让i走到最后一行*/
else
i--;
if(j==n-1)
/*横线之间这一段代码是按魔方阵的规则移动下标*/
j=0;
/*这里是放入k值后,如j是最后一列,让j走到第一列*/
else
j++;
/*-------------*/
}
for(i=0;i<n;i++)
/*输出魔方阵*/
{
for(j=0;j<n;j++)
{
printf("%5d",a[i][j]);
}
printf("\n\n");
}
getchar();
getchar();
}
[
本帖最后由 UserYuH 于 2009-8-27 16:59 编辑 ]