神奇的魔术方阵

来源:互联网 发布:数据库管理系统功能 编辑:程序博客网 时间:2024/04/27 16:27
魔术方阵简单的说,就是将连续整数1,2,3....,n 的数字,依特别之顺序,排在方阵里.使每一行的数,每一列的数或对角线位置的数各自相加,所得的和皆均为相同.

魔术方阵别称魔术方阵,是一种已流传千年的数字排列,不管是中西方对这奇妙的阵列都有所研究.


对平面魔方的构造,分为三种情况:N为奇数、N为4的倍数、N为其它偶数(4n+2的形式)  
N 为奇数时,最简单  
 (1) 将1放在第一行中间一列;  
 (2) 从2开始直到n×n止各数依次按下列规则存放:每一个数存放的行比前一个数的行数减1,列数加1 
 (3) 如果行列范围超出矩阵范围,则回绕。   例如1在第1行,则2应放在最下一行,列数同样加1;  
 (4) 如果按上面规则确定的位置上已有数,或上一个数是第1行第n列时,则把下一个数放在上一个数的下面。


用C语言实现的代码:

#include <stdio.h>#include <stdlib.h>#define MAXSIZE 100int main(){int n;   //矩阵行、列数int matrix[MAXSIZE][MAXSIZE]={0};int i=1,j;     //循环变量int k=1;int tmpi=0,tmpj=0;while(1){printf("请输入矩阵行数(奇数):");    scanf("%d",&n);if((n<=0)||(n%2==0)){printf("请输入正确的矩阵行数(正奇数):");    scanf("%d",&n);}elsebreak;}    j=n/2+1;matrix[i][j]=k;    for(k=2;k<=n*n;k++){            tmpi=i;tmpj=j;if(j==n){j=1;}else{j++;}if(i==1){i=n;}else{i--;}if(matrix[i][j]!=0){i=tmpi+1;    j=tmpj;}matrix[i][j]=k;        }for(i=1;i<=n;i++){for(j=1;j<=n;j++){printf("%2d   ",matrix[i][j]);}printf("\n");}}

运行效果如下:



0 0
原创粉丝点击