数据结构课程设计 文章编辑
边界,则修改为下边界的相应位置,即把p-1修改为n-1;ⅱ)若填充位置超出左边界,则修改为最右边
的相应位置,即把q-1修改为n-1;ⅲ)若该位置已有数字,则填充位置修改为下一行,同一位置。c)
重复以上过程,直至将n
2
个数字全部填入魔方中。
2). void shuang(int n)
此函数主要采用了二维矩阵的算法将双偶数魔幻方阵填入并输出。其具体算法如下:当n能被
4整除时,n为双偶数,a)把1到n
2
依次填入n×n的n阶方阵中;b)方阵行数与列数之和除4取余为
3或者行数除4的余数等于列数除4的余数,则此位置上数不变,c)将其余数a[p][q] 与a[n-1-p][n-1-
q]位置对调即可得到双偶数n阶魔幻方阵。
3). void dan(int n)
此函数依然采用了二维矩阵的算法将双偶数魔幻方阵填入并输出。其具体算法如下:当n能被2
整除但不能被4整除时,n为单偶数,此时a)将n阶单偶幻方表示为4m+2阶幻方。将其等分为四分,成
为如下图所示A、B、C、D四个2m+1阶奇数幻方。
A C
D B
b)A用1至(2m+1)*(2m+1)填写成(2m+1)阶幻方;B用(2m+1) *(2m+1)+1至2*(2m+1) *
(2m+1)填写成2m+1阶幻方;C用2*(2m+1) *(2m+1) +1至3*(2m+1) *(2m+1)填写成2m+1阶
幻方;D用3*(2m+1) *(2m+1)+1至4*(2m+1) *(2m+1)填写成2m+1阶幻方;c)在A中间一行取m个小
格,其中1格为该行居中1小格,另外m-1个小格任意,其他行左侧边缘取m列,将其与D相应方格内交换
B与C接近右侧m-1列相互交换,即的n阶魔幻方阵。
4). out(n,a)
此函数调整方阵元素位置,将魔幻方阵以n×n形式输出。
5). check(n,a)
此函数计算并输出n阶魔幻方阵每一行、每一列、每条对角线上的数字累加和。
2.各函数具体实现代码:
1). void jishu(int n) 具体实现代码
void jishu(int n)
{
int p,q,i,a[15][15];
p=0;
q=(n-1)/2;
a[0][q]=1;
for(i=2;i<=n*n;i++)
{
p=(p-1+n)%n;
q=(q-1+n)%n;
if(a[p][q]>0)
{
p=(p+2)%n;
q=(q+1)%n;
}
a[p][q]=i;
}
}
4 / 17