3第三题_Dole Rob 算法生成魔方阵

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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");
}

}

相关文档
最新文档