奇数阶魔方阵的数字规律 通过对奇数阶魔方阵的分析,其中的数字排列有如下的规律: (1)自然数1出现在第一行的正中间; (2)若填入的数字在第一行(不在第n列),则下一个数字在第n行(最后一行)且列数加1(列数右移一列); (3)若填入的数字在该行的最右侧,则下一个数字就填在上一行的最左侧; (4)一般地,下一个数字在前一个数字的右上方(行数少1,列数加1); (5)若应填的地方已经有数字或在方阵之外,则下一个数字就填在前一个数字的下方。(一般地,n的倍数的下一个数字是在该数的下方。)
C语言版本实现3阶魔方阵如下:
代码语言:javascript复制#include <stdio.h>
int main(){
int row=3;
int nums[3][3];
int rowindex=0,colindex=0;
//自然数1出现在第一行的正中间
nums[0][row/2]=1;
rowindex=0;
colindex=row/2;
int i,j;
for(i=2;i<=row*row;i ){
//若填入的数字在第一行且不在最后n列,则下一个数字在第n行且列数加1
if(rowindex==0&&colindex!=row-1){
rowindex=row-1;
colindex=colindex 1;
nums[rowindex][colindex]=i;
continue;
}
//若填入的数字在改行最右侧且不在第一行,则下一个数字就在上一行的最左侧
if(colindex==row-1&&rowindex!=0){
rowindex=rowindex-1;
colindex=0;
nums[rowindex][colindex]=i;
continue;
}
//若应填入的地方已经有数字或者在方阵之处,则下一个数字就填在前一个数字的
//一个数字的下方
if(rowindex==0||colindex==rowindex-1||nums[rowindex-1][colindex 1]!=0){
rowindex=rowindex 1;
nums[rowindex][colindex]=i;
}else {
//一般地,下一个数字在前一个数字的右上方(行数减1,列数加1)
rowindex-=1;
colindex =1;
nums[rowindex][colindex]=i;
}
}
//输出
int count=0;
for(i=0;i<row;i ){
for(j=0;j<row;j ){
count ;
printf("%dt", nums[i][j]);
if(count%3==0){
printf("n");
}
}
}
return 0;
}
运行结果如下:
代码语言:javascript复制8 1 6
3 5 7
4 9 2