那位大虾、帅哥、仁兄给个“魔方阵”的C语言代码,在下感激不尽!

来源:百度知道 编辑:UC知道 时间:2024/05/10 04:48:52
关于魔方阵就是:一个二维数列,这个数列的每一行的和,每一列的和、对角线的和都相等,魔方阵的元素皆为自然数,且不相等。
zhuxingfu0528,你好,你的代码可以解决问题,但是我看了半天也没看懂你的原理(也许我比较苯);如果解释一下,那就太好不过了!麻烦了!

N行N列魔方阵,其构成法则:
第一,阶数必须是奇数(n>3);
第二,将“1”放在第一行的中间一列;
第三,从“2”开始只到n*n各数依次按下里列规则存放:每一个数存放的行比前一个数的行数减1,列数加1;
第四,如果上一个数的行数为 1,则下一个数的行数为n,列数加1;
第五,如果上一个数的列数为n,则下一个数的列数为1,行数减1;
第六,如果上面规则确定的位置上已经有数,或者上一个数是第1行第n列时
,则把下一个数放在这一个数下面。

#include<stdio.h>
#define N 20
main()
{
int n,i,j,r,a[N][N]={0};
scanf("%d",&n);
i=0,j=n/2;
a[i][j]=1; //填1
for (r=2;r<=n*n;r++)
if (a[(i+n-1)%n][(j+1)%n]==0)
{
i=(i+n-1)%n;//计算当前i应该填充的行,因为可能超过0~n-1范围,所以取余
j=(j+1)%n; //计算当前i应该填充的列,因为可能超过n-1,所以取余
a[i][j]=r;
}
else //计算出的位置已经有元素,则放在当前位置的正下方
{
i=(i+1)%n; //计算行数
a[i][j]=r;
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf("%4d",a[i][j]);
printf("\n");
}
}

那位仁兄给个暗黑变态的战网啊 那位仁兄给提供个优秀的录音软件 那位仁兄能给我介绍一两个网络小说 那位帅哥美女给个金山打字的 天之痕那下啊?那位仁兄给个网站 有那位大虾帮下忙 给个dreamwever 序列号啊 那位大虾能给个病毒的源代码? 那位大虾给帮忙取个名字啊 那位大虾给个QQ珊瑚虫版本!!!!! 那位仁兄能给找个《僵尸斯塔布斯》的下载地址。