N阶魔方阵是:元素为自然数1,2,…,N2的N×N方阵,每个元素值均不相等,每行、每列以及主、副对角线上各N个元素之和相等。
例如3阶魔方阵为:
8 1 6
3 5 7
4 9 2
提示:从1开始,依次放置各自然数,Dole Rob算法可以确定插入的每一个元素的下标:
1) 第一个位置在第一行的正中。
2) 若最近一个插入元素为N的整数倍,则选下一行同列上的位置为新位置。
3) 新位置处于最近一个插入位置的右上方。
4) 若超出方阵上边界,则选该列的在最后一行的位置,若超过右边界,则选择该行的在最左一列的位置。
参考示例的3阶魔方阵,理解算法提示,并编程实现。
#include <stdio.h>
#define P 5 //显示5阶魔方阵
int a[P][P]={0};
int main(){
int i=0,j=P/2,k;
int x,y;
a[i][j]=1;
for(k=2;k<=P*P;k++){
if((k-1)%P==0){
i = i+1;
a[i][j]=k;
}
else{
i--;
j++;
if(i<0) i=P-1;
if(j>P-1) j=0;
a[i][j]=k;
}
}
for(x=0;x<P;x++){
for(y=0;y<P;y++){
printf("%d ",a[x][y]);
}
printf("\n");
}
return 0;
}