神奇的魔术方阵
来源:互联网 发布:数据库管理系统功能 编辑:程序博客网 时间: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
- 神奇的魔术方阵
- cyril的神奇魔术
- 数组 魔术方阵的实现 书上搬过来的
- 魔术子弹搅拌机拥有神奇的子弹的好处
- 数学小魔术——神奇的二进制
- N*N 的方阵
- 蛇行方阵的算法
- 螺旋方阵的实现
- 方阵
- php的魔术函数和魔术常量
- php的魔术函数和魔术常量
- PHP的魔术函数和魔术常量
- PHP的魔术变量及魔术方法
- PHP的魔术常量和魔术方法
- 方阵的幂的应用
- Apache的魔术
- 火的魔术
- php的魔术方法
- 渐进符号(二)
- 配置自己的CocoaPods库
- 20个经典bootsrtap后台html网站模板推荐
- LeetCode – Search Insert Position
- Timeout expired. The timeout period elapsed prior to completion of the operation or the server is no
- 神奇的魔术方阵
- 提示microsoft incremental linker已停止工作解决方法
- CentOS6 rpm 安装Open vSwitch(OVS)报错
- 说说spring的自动装配
- Sqlite3支持的数据类型 日期函数 Sqlite3 函数
- Hdu 2082 找单词 母函数
- strcmp,strncmp,memcmp,strcat,strncat函数实现
- 《C++ Primer》读后感
- 特殊字符导致json字符串转换成json对象出错