对奇阶魔方阵,可用Dole Rob算法生成,其过程为:从1开始,以此插入各自然数,直到N*N为止。选择插入位置原则为:
a. 第一个位置在第一行的正中;
b. 新位置应当处于最近一个插入位置右上方,但如右上方位置已超出方阵上边界,则新位置取应选列的最下一个位置;如超出右边界则新边界取应选行的最左一个位置;
c. 若最近一个插入元素为N的整数倍,则选下面一行同列的位置为新位置。
实现代码如下:
#include<stdio.h> #include<stdlib.h> #define SIZE 100//魔法阵 void Magic() {int m[SIZE+1][SIZE+1];int n;int value=1;int col,row;printf("请输入魔方阵的阶数n,n为奇数且n<=%d;n=",SIZE);scanf("%d",&n);if(!(n%2)||n<1||n>SIZE){printf("输入有误!\n");return ;}row=1;col=(n+1)/2;while(value<=n*n){m[row][col]=value;if(value%n){row--;col++;if(row<1) row=n;if(col>n) col=1;}else row++;value=value+1;}for (int i = 1; i < n+1; i++){for (int j= 1; j < n+1; j++)printf("%5d",m[i][j]);printf("\n");} }
实现的很巧妙!