3第三题_Dole Rob 算法生成魔方阵
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
/*
[说明]
下面的程序用Dole Rob 算法生成N 阶(N 为奇数)魔方阵(各行、列、对角线数字
之和相等)。该算法的过程为:从1 开始,按如下方法依次插入各自然数,直到N2 为止:
a. 在第一行的正中插入1;
b. 新位置应当处于最近插入位置的右上方,若该位置已超出方阵的上边界,则新
位置取应选列的最下一个位置;若超出右边界,则新位置取应选行的最左一个
位置;
c. 若最近插入的元素是N 的整数倍,则选同列的下一行位置为新位置。
例如,3 阶魔方阵如下所示:
*/
#include
#define MAXSIZE 50
void main()
{
int row,column,number,value;
int n;
int a[MAXSIZE][MAXSIZE];
while( n<2 || n>MAXSIZE || n%2==0)
{
printf("输入魔方阶数(0~%d奇数):",MAXSIZE);
scanf("%d",&n);
}
value=1;
number=n*n;
row=1,column=n/2+1;
while( value<=number )
{
a[row][column]=value;
if( value%n==0 )
{
row++;
}
else
{
--row,++column;
if( row<1 )
{
row=n;
}
if( column>n )
{
column=1;
}
}
value++;
}
for( row=1; row<=n; row++ )
{
for( column=1; column<=n; column++ )
printf(" %5d",a[row][column]);
printf("\n");
}
}