重庆房产网站建设,安装wordpress的目录改变了,河西区做网站的公司,wordpress多用户图库魔方又称幻方、纵横图、九宫图#xff0c;最早记录于我国古代的洛书。据说夏禹治水时#xff0c;河南洛阳附近的大河里浮出了一只乌龟#xff0c;背上有一个很奇怪的图形#xff0c;古人认为是一种祥瑞#xff0c;预示着洪水将被夏禹王彻底制服。后人称之为洛书最早记录于我国古代的洛书。据说夏禹治水时河南洛阳附近的大河里浮出了一只乌龟背上有一个很奇怪的图形古人认为是一种祥瑞预示着洪水将被夏禹王彻底制服。后人称之为洛书或河图又叫河洛图。 南宋数学家杨辉在他著的《续古摘奇算法》里介绍了这种方法只要将九个自然数按照从小到大的递增次序斜排然后把上、下两数对调左、右两数也对调最后再把中部四数各向外面挺出幻方就出现了。 (摘自《趣味数学辞典》) 在西方阿尔布雷特·丢勒于1514年创作的木雕《忧郁》是最早关于魔方矩阵的记载。有学者认为魔方矩阵和风靡一时的炼金术有关。几个世纪以来魔方矩阵吸引了无数的学者和数学爱好者。本杰明·富兰克林就做过有关魔方矩阵的实验。 最简单的魔方就是平面魔方还有立体魔方、高次魔方等。对于立体魔方、高次魔方世界上很多数学家仍在研究本文只讨论平面魔方。 每行、每列及对角线之和被称为魔术常量或魔法总和M。 其中n为阶数。 例如如果n3则M[3*(3^21)]/2 15. ------------------来自百度 先标出引用地址 http://blog.ddedu.com.cn/user1/88/archives/2007/2007420143329.shtml //任意阶幻方构造方法 http://blog.csdn.net/cmutoo/article/details/5487157 //任意阶幻方C语言代码实现有些许错误 基础知识这里看http://blog.csdn.net/oowgsoo/article/details/1567910 任意阶幻方的构造方法有很多种所以要选定一种易于代码实现的一种 在上篇博客中说道 /************************************************************************************ 幻方的数量:与我们大多数人的常识不同,幻方的数量不是唯一的,而且也不是一个简单的问题3阶幻方只有1种4阶幻方有880种,通过旋转和反射,总共可以有7040个幻方5阶幻方有275 305 224个,这是用计算机算的6阶幻方,大概是1.7743*10**19~1.7766*10**19之间,这是用统计学方法计算的,居然计算机也算不出来,更不要说6阶以上的幻方数量了 ************************************************************************************/ 所以代码实现的就有很大的局限性只能实现某一种构造方法的幻方 幻方构造分为 1、奇数阶 2、双偶阶 3、单偶阶 三种。 对于奇数阶的幻方 /******************************************************************* n为奇数 (n357911……) (n2×k1k12345……) 奇数阶幻方最经典的填法是罗伯特法(也有人称之为楼梯法)。填写方法是这样 把1(或最小的数)放在第一行正中 按以下规律排列剩下的n×n-1个数 (1)每一个数放在前一个数的右上一格 (2)如果这个数所要放的格已经超出了顶行那么就把它放在底行仍然要放在右一列 (3)如果这个数所要放的格已经超出了最右列那么就把它放在最左列仍然要放在上一行 (4)如果这个数所要放的格已经超出了顶行且超出了最右列那么就把它放在前一个数的下一行同一列的格内 (5)如果这个数所要放的格已经有数填入处理方法同(4)。 这种写法总是先向“右上”的方向象是在爬楼梯。 *******************************************************************/ 其实在C语言实现时是有潜在的规律的当要填的数为n的倍数时说明所要放的格已经有数填入 实现过程也是很巧妙…… void Odd(int n,int index)
{while(st ! index){cube[oxstx][oysty] st;if((st-1) % n ! 0){stx--;sty;}else{stx;}stx ((stx-1)%nn)%n1;sty (sty%n 0 ? n : sty%n);}
} 对于双偶数阶的 就是一个中心对称 void DouEven(int n)
{int i,j;int st 1;for(i1; in; i){for(j1; jn; j){cube[i][j] st;}}int zx,zy,fx,fy;for(i4; in*n; i4){for(j4; jn*n; j4){zxi-3,zyj-3,fxi,fyj-3;cube[zx][zy]n*n-cube[zx][zy]1;cube[zx1][zy1]n*n-cube[zx1][zy1]1;cube[zx2][zy2]n*n-cube[zx2][zy2]1;cube[zx3][zy3]n*n-cube[zx3][zy3]1;cube[fx][fy]n*n-cube[fx][fy]1;cube[fx-1][fy1]n*n-cube[fx-1][fy1]1;cube[fx-2][fy2]n*n-cube[fx-2][fy2]1;cube[fx-3][fy3]n*n-cube[fx-3][fy3]1;}}
} 对于单偶数阶的麻烦许多 因为要用到奇数阶的构造方法 void SingleEven(int n)
{int i,j;oxoy0;st1;stx1,sty(n/21)/2;Odd(n/2,n*n*1/41); //A
oxoyn/2;stx1,sty(n/21)/2;Odd(n/2,n*n*2/41); //D
ox0,oyn/2;stx1,sty(n/21)/2;Odd(n/2,n*n*3/41); //B
oxn/2,oy0;stx1,sty(n/21)/2;Odd(n/2,n*n*4/41); //Cint k(n-2)/4,tmp;for(j1; jn/2; j){for(i1; ik; i){if(j ! (n/21)/2){tmp cube[j][i];cube[j][i] cube[jn/2][i];cube[jn/2][i] tmp;}else{tmp cube[j][i(n/21)/2-1];cube[j][i(n/21)/2-1] cube[jn/2][i(n/21)/2-1];cube[jn/2][i(n/21)/2-1] tmp;}}}if(k-1){for(i1; in/2; i){int tmpp (3*n2)/4-1;for(j1; jk-1; j){tmp cube[i][jtmpp];cube[i][jtmpp] cube[in/2][jtmpp];cube[in/2][jtmpp] tmp;}}}
} 最后贴一个完整的代码 #include stdio.h
#include string.hint cube[1000][1000];
int stx,sty;
int st;
int num;
int ox,oy;void Odd(int n,int index)
{while(st ! index){cube[oxstx][oysty] st;if((st-1) % n ! 0){stx--;sty;}else{stx;}stx ((stx-1)%nn)%n1;sty (sty%n 0 ? n : sty%n);}
}void DouEven(int n)
{int i,j;int st 1;for(i1; in; i){for(j1; jn; j){cube[i][j] st;}}int zx,zy,fx,fy;for(i4; in*n; i4){for(j4; jn*n; j4){zxi-3,zyj-3,fxi,fyj-3;cube[zx][zy]n*n-cube[zx][zy]1;cube[zx1][zy1]n*n-cube[zx1][zy1]1;cube[zx2][zy2]n*n-cube[zx2][zy2]1;cube[zx3][zy3]n*n-cube[zx3][zy3]1;cube[fx][fy]n*n-cube[fx][fy]1;cube[fx-1][fy1]n*n-cube[fx-1][fy1]1;cube[fx-2][fy2]n*n-cube[fx-2][fy2]1;cube[fx-3][fy3]n*n-cube[fx-3][fy3]1;}}
}void SingleEven(int n)
{int i,j;oxoy0;st1;stx1,sty(n/21)/2;Odd(n/2,n*n*1/41); //A
oxoyn/2;stx1,sty(n/21)/2;Odd(n/2,n*n*2/41); //D
ox0,oyn/2;stx1,sty(n/21)/2;Odd(n/2,n*n*3/41); //B
oxn/2,oy0;stx1,sty(n/21)/2;Odd(n/2,n*n*4/41); //Cint k(n-2)/4,tmp;for(j1; jn/2; j){for(i1; ik; i){if(j ! (n/21)/2){tmp cube[j][i];cube[j][i] cube[jn/2][i];cube[jn/2][i] tmp;}else{tmp cube[j][i(n/21)/2-1];cube[j][i(n/21)/2-1] cube[jn/2][i(n/21)/2-1];cube[jn/2][i(n/21)/2-1] tmp;}}}if(k-1){for(i1; in/2; i){int tmpp (3*n2)/4-1;for(j1; jk-1; j){tmp cube[i][jtmpp];cube[i][jtmpp] cube[in/2][jtmpp];cube[in/2][jtmpp] tmp;}}}
}void print(int n)
{int i,j;for(i1; in; i){int sum 0;for(j1; jn ; j){sum cube[i][j];printf(%4d,cube[i][j]);}printf( sum %d,sum);printf(\n);}
}int main()
{int i,j,k,t,n,m;do{printf(Please Input n(3-17): );scanf(%d,n);if(n3)continue;memset(cube,0,sizeof(cube));if(n % 2 1){stx1,sty(n1)/2;oxoy0;st1;Odd(n,n*n1);print(n);}else if(n % 4 0){DouEven(n);print(n);}else if(n % 2 0 n % 4 ! 0){SingleEven(n);print(n);}}while(1);return 0;
} 再上一个专门关于介绍幻方的博客http://blog.sina.com.cn/u/1225071715 转载于:https://www.cnblogs.com/ccccnzb/p/4017872.html