




已阅读5页,还剩21页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
偶数阶幻方填法以4阶为例,说说偶数阶的填法:首先,按顺序写下个数:接下来固定对角线上数字不动(这里是、和、),其它数字作左右对换,如与换,与换等,得到下面的排列:继续固定对角线,其他数字作上下对称变换,如与换,与换等,得到如下排列:这就是四阶幻方,每行每列四个数字之和均为,其他偶数阶幻方填法可类推!奇数阶幻方口诀1坐边中间,斜着把数填;出边填对面,遇数往下旋;出角仅一次,转回下格间。 一、奇数阶纪方的构造方法(楼梯法)。把1(或最小的数)放在第一行正中;按以下规律排列剩下的n*n-1个数:1)每一个数放在前一个数的右上一格;2)如果这个数所要放的格已经超出了顶行那么就把它放在底行,仍然要放在右一列;3)如果这个数所要放的格已经超出了最右列那么就把它放在最左列,仍然要放在上一行;4)如果这个数所要放的格已经超出了顶行且超出了最右列那么就把它放在前一个数的下一行同一列的格内;5)如果这个数所要放的格已经有数填入,处理方法同4)。图示:*1*1*2*1*1*3*3*24*2*1*1635*35*4*24*2*168163573574*24*2816357492奇数阶幻方的一种用公式表达的构造方法:设x是要填入的数,(xx,yy)是坐标。坐标如何确定呢?k= (x-1) div n +(n+3) div 2 + (x-1)yy=k- (k-1) div n *np= (n+1) div 2 + (x-1)- (x-1) div nxx=n+1-p+(p-1) div n * n二、双偶阶(4k)阶幻方的构造方法。就是说,阶数可以被4整除。看看4阶幻方的制作方法:先把数字,按顺序写(从左到右,从上到下):12345678910111213141516然后把对角线,换成互补的数字。定义:互补:如果两个数字的和,等于幻方最大数和最小数的和,即 n*n+1,称为互补。16231351110897612414151人们从4阶幻方的制作方法,找到了构造双偶阶幻方的方法:对于n=4k阶幻方,我们先把数字按顺序填写。写好后,按4*4把它划分成k*k个方阵。把每个小方阵的对角线,象制作4阶幻方的方法一样,换成互补的数字,就构成幻方。事实上,有些小方阵的对角线是连着的。但是因为没有办法画图,我只能这样子描述。双偶阶幻方另一种用PASCAL程序语句表达的构造的方法如下:for i:=1 to n dofor j:=1 to n dobeginif j mod 41 then m:=1else m:=0;k:=n-i-(n-2*i+1)*m;if i mod 41 then m:=1else m:=0;L:=n-j+1-(n-2*j+1)*m;ai, j:=k*N+L;end;三、单偶阶(4k+2)幻方的构造阶数是偶数,但是,又不能被4整除。这是最难的一种幻方。一种构造n=4k+2幻方的方法:(1) 先排出4k的双偶阶幻方(2) 根据幻方的性质,每个数都同时加上 8k+2(3) 把它扩展成为4k+2的方阵。这样,四周包围着一圈。我们只要把1,2,3,8k+2, (4k+2)2, (4k+2)2-1, ,(4k)2+1+8k+2这些数字,填入最外一圈,使得:对角线两端,每行、每列两端数字互补。当然,最后圈的两横,两列各数之和要等于变幻常数。以制作6阶幻方为例:先制作出4阶幻方。方阵的每个数字,加上8k+2=10再把它扩大成6阶,如下图:* * *26121323*15212018*19171622*14242511* * *我们只要把1,2,3,9,10,36,35,34,27填入外圈。不过,当n较大时,外圈的填法也不太容易。有一种公式来填外圈。坐标(j,i) 为j行i列的。先固定填下这10个数:a1,1=1an,1=4an-1,1=10a2,n=3a3,n=5a4,n=7an,n-2=2an,n-1=9a1,2=6a1,3=8当n=4k+2时,aj,i=11,12,k+9(j=1,i=4.k+2)k+10,k+11,2k+8(j=5.k+3,i=n )2k+9,2k+10,3k+7(j=n ,i=2k+2.3k)3k+8,3k+9,5k+5(j=2k+3.4k, i=1)5k+6,5k+7,6k+4(j=n,i=3k+1.4k-1)6k+5,6k+6,7k+3(j=k+42k+2,i=n)7k+4,7k+5,8k+2(j=1,i=k+3.2k+1)按公式算出来后,实际上外圈已经填好了一半了。剩下来的工作,只要把剩下的相对应元素,填下去。(同行两端的数相对应、同列两端的数相对应、两条对角线两端的数相对应,每对之和为n*n+1)。介绍另外一种构造单偶阶幻方的方法: 基本图(是个6阶方阵)4 24 21 21 31 34 34 21 24 21 34 31 34 24 21 21 31 34 3这个方阵要把它按2*2把大方阵分割成3*3个格,每个格子里4个数都是1,2,3,4,只是方向上不同。 如果要作的幻方不是6阶,是更大的阶数:每次同时在最上面、最下面加入下面方阵:4 24 21 21 31 34 3每加一次,多出4行来,直至想要的阶数。这样加后是个长方形方阵,左边、右边怎么办?左边都用4 31 2同时,右边都用1 24 3填充,每次多出4列来,直至想要的阶数。下面是加成10*10方阵的例子:4 34 24 21 21 21 21 31 34 34 34 34 24 21 21 21 21 31 34 34 34 34 21 24 21 21 21 34 31 34 34 34 24 21 21 21 21 31 34 34 34 34 24 21 21 21 21 31 34 34 3如果把每2*2的小格子四个数,看成一个格子,这是一个2k+1奇数阶方阵。画个(2k+1)*(2k+1)的格子吧,格子画大一点,我们要按奇数阶幻方的填法,填写这些格子,只不过每次要填写的是四个数。方向跟着制作出来的参考图方向一样。例:我们要做一个6阶的幻方。参考图当然是用 基本图,不需要迭加了。然后,列成3*3个大格子,大格子的顺序我们按奇数幻方的顺序填写,小格子里的顺序按1,2,3,4这四个数字的方向填写,按顺序每次填入4个数:* *4 2* * *4 2* * *1 3* * *1 3* * * * * * * * * * * * * * * * * * *5 6* * * * * *8 7=*4 2* *4 2* *1 3* *1 3* *12 10* * *1210* * *911* * *911* * * *5 616 14* *5 6* *8 713 15* *8 7=继续直至填完。三、练习1、用1、4、7、10、13、16、19、22、25填出三阶幻方。2、用95、85、75、65、55、45、35、25、15填出三阶幻方。3、用181八十一个自然数填出一个九阶幻方。4、用1/2、1/3、2/3、1/4、3/4、1/6、1/12、5/12、7/12九个分数摆一个三阶幻方。奇数阶幻方程序/* n阶幻方程序* 完成者:meteor135* 完成日期:2003.9.8* 编译环境:VC6.0*/#include #include #include void showFangzhen(int n);int main()/输出10组幻方for(int n = 0; n 10; n +)showFangzhen(2*n+1);coutPress enter to quit!;cin.get();return 0;void showFangzhen(int n)if(!(n%2) return;int i,j,*array;/为指针分配动态内存array=new int*n;for(i=0; in; i+)arrayi = new intn;/初始化数组for(i=0; in; i+)for(j=0; jn; j+)array(n-1)/2+i-j+n)%n(3*n-1+j-2*i)%n=i*n+j+1;/or/array(n+2*i-j)%n(n-1)/2+n+j-i)%n=i*n+j+1;/输出n阶幻方coutn阶幻方:endl;for(i=0; in; i+)for(j=0;jn;j+)coutsetw(int(log10(n*n)+2)arrayij;coutendl;coutendl;/释放动态内存for(i=0; in; i+)delete arrayi;/原来是 delete arrayi;delete array;可能是n阶幻方的程序这是我的幻方程序,在TC3。0下通过可以动态显示其中M=n*n+1(n为幻方阶数)?#include#include#include#define N 3#define M 226void main()textmode(C40);clrscr();int x,y,p,q,n,num=1;int aMM;int flag=0;int k,s;for(k=0;k=M-1;k+)for(s=0;s=1&n7)/textmode(C80);clrscr();gotoxy(n/2+1)*N,N);printf(%d,num);x=n/2+1;y=1;axy=num;num+;while(num=n*n)if(p=x,x-11)x=n;elsex-;if(q=y,y-11)y=n;elsey-;if(axy=0)axy=num;elseapq+1=num;x=p;y=q+1;gotoxy(x*N,y*N);printf(%d,num);num+;delay(300);char ch;ch=getchar();ch=getchar();任一阶幻方#include #include void swap(int *a,int *b)int t;t=*a;*a=*b;*b=t;void hf1(int n,int *p)int m=1,i,j,k,l;for(i=0;in;i+)for(j=0;jn*n)break;k=i-1;l=j+1;if(k=-1)k=n-1;if(l=n)l=0;if(*(p+k*n+l)!=0)i+;continue;i=k;j=l;void hf2(int n,int *p)int i,j,*q;q=malloc(n*n/2);hf1(n/2,q);for(i=0;in/2;i+)for(j=0;jn/2;j+)*(p+i*n+j)=*(q+i*n/2+j);*(p+(i+n/2)*n+j+n/2)=*(p+i*n+j)+n*n/4;*(p+i*n+j+n/2)=*(p+(i+n/2)*n+j+n/2)+n*n/4;*(p+(i+n/2)*n+j)=*(p+i*n+j+n/2)+n*n/4;for(i=0;in/2;i+)for(j=0;j=n-(n-4)/4;j-)swap(p+i*n+j,p+(i+n/2)*n+j);swap(p+(n/2-1)/2*n,p+(3*n/2-1)/2*n);swap(p+(n/2-1)/2*n+(n/2-1)/2,p+(3*n/2-1)/2*n+(n/2-1)/2);void hf3(int n,int *p)int i,j,k,m=1;for(i=0;in;i+)for(j=0;jn;j+)*(p+i*n+j)=m+;for(k=0;kn;k+=4)for(i=
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 英语中考一卷试题及答案
- 竞争团员演讲稿
- 北宋的政治面试题及答案
- 2025年水泥粉磨巡检试题及答案
- 高考对口升学试卷及答案
- 职业重庆高考语文试卷及答案
- 为施工方案进行设计审查
- 2025年白山市教育系统“进校园”招聘高校毕业生(52人)考前自测高频考点模拟试题及1套参考答案详解
- 中式快餐服务管理制度
- 中秋策划方案活动
- 天津市2024年七年级上学期数学期中考试试卷【附答案】
- GB/T 17395-2024钢管尺寸、外形、重量及允许偏差
- 24.1.1《圆》数学人教版九年级上册教学课件
- 乳品领域:认养一头牛企业组织架构及部门职责
- 宠物乐园方案
- 自备车补贴申请表
- 注塑成型技术培训之工艺理解课件
- 信息论与编码(第4版)完整全套课件
- 广西佑太药业有限责任公司医药中间体项目环评报告书
- 汽修厂安全风险分级管控清单
- 海绵城市公园改造施工组织设计
评论
0/150
提交评论