奇阶魔方阵
对奇阶魔方阵,可用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"); } }
实现的很巧妙!