简单的魔方阵
魔方阵的简单解法:(不会吧?看不懂,那么我加上注释吧)void main(void)
{
int a[9][9];
int i,j,n,t;
do
{
printf("Input n:");
scanf("%d",&n);
clrscr();
}while(n<3||n%2==0||n>9); /* n为10以内的奇数 */
for(i=0;i<n;i++)
for(j=0;j<n;j++)
a[i][j]=0; /* 把数组每个元素赋0 */
j=n/2;
a[0][j]=1; /* 把1放在数组第一行的中间 */
for(t=2;t<=n*n;t++)
{
i--;
j++; /* 每次循环行数减1,列数加1,即把数字放在当前的右上角 */
if(i<0)i=n-1; /* 当行数为0时,下次行数为n-1 */
if(j>n-1)j=0; /* 当列数为n-1时,下次列数为0 */
if(a[i][j]) /* 如果右上角已有数字,那么把数字放在下面 */
{
i=(i+2)%n;
j=(j-1+n)%n; /* 控制转向 */
}
a[i][j]=t;
}
for(i=0;i<n;i++) /* 输出数组 */
{
for(j=0;j<n;j++)
printf("%3d",a[i][j]);
printf("\n\n");
}
system("PAUSE");
}
n=9
47 58 69 80 01 12 23 34 45
57 68 79 09 11 22 33 44 46
67 78 08 10 21 32 43 54 56
77 07 18 20 31 42 53 55 66
06 17 19 30 41 52 63 65 76
16 27 29 40 51 62 64 75 05
26 37 39 50 61 72 74 04 15
36 38 49 60 71 73 03 14 25
37 48 59 70 81 02 13 24 35
偶数的魔方阵研究中...
[此贴子已经被作者于2005-9-19 22:53:33编辑过]