c语言魔方阵偶数算法,魔方阵的C语言算法.doc

魔方阵的C语言算法

魔方阵的c语言算法#include "stdio.h"#define Q 100int a[Q][Q];FILE *fp;void swap(int *a,int *b)/*交换函数*/{??int t;??t=*a;??*a=*b;??*b=t;}

void Magic2Kplus1(int t,int H,int L,int N){/*?? 阶数N是奇数魔方阵?? 其中int t,表示:从t开始向魔方阵中填数?? int H,int L分别表示从从魔方阵中的哪个位置开始填数?? int N 表示魔方阵的阶数下面举例子说明以3阶魔方阵为例第1步: 中间填 1x??1??xx??x??xx??x??x第2步:数2应向1的右上角填但是没地方了就移到右下角x??1??xx??x??xx??x??2第3步:数3应向2的右上角填但是没地方了就移到2上一行的最左边x??1??x3??x??xx??x??2第4步:数4应向3的右上角填但是这个地方已经有数字1了就移到3下边x??1??x3??x??x4??x??2第5步:数5向4的右上角填x??1??x3??5??x4??x??2第6步??数6向5的右上角填x??1??63??5??x4??x??2第7步:数7应向6的右上角填但是没地方了就移到6下边x??1??63??5??74??x??2第8步:数8应向7的右上角填但是没地方了就移到3上边8??1??63??5??74??x??2第9步:数9应向8的右上角填但是没地方了就移到5下边8??1??63??5??74??9??2

?? 详情请参看:.tw/oddest/index.htm*/

?? int i=H,k=t;?? int j=(N-1)/2+L;?? a[i][j]=k;?? while(1)?? {????if(i-1=N+L)????{???? i++;???? a[i][j]=++k;???? continue;????}????if(i-1=N+L)j=L;??????else j++;????if(a[i][j]=='\0') a[i][j]=++k;????else????{????i+=2;????j--;????a[i][j]=++k;????}????if(k==N*N+t-1) break;?? }}

void Magic4K(int N)/*阶数N是4K的魔方阵*/{/*?? 雙向翻轉法(4k階)?本法先將數字順序填入方陣之後,再施以兩階段的翻轉,一次縱向、一次橫向,故名雙向翻轉法。?本法僅能填製 4k 階的魔方陣,其填製方法共分三步驟:第一步:將數字由左而右、由上而下順序填入方陣。?第二步:將中央部分半數的列,所有數字左右翻轉。?第三步:將中央部分半數的行,所有數字上下翻轉。如果仔細揣摩數字的分布,其實要將數字由 1 到 n2 一口氣連續填入方陣,並不是難事!

第 1 步:先將數字由左而右、由上而下順序置放方陣中。1??2??3??45??6??7??89 10 11 1213 14 15 16

第 2 步:將第 2、3 列的數字左右翻轉。1??2??3??48??7??6??512 11 10??913 14 15 16

第 3 步:將第 2、3 行的數字垂直翻轉。1 14 15 4?8 11 10 5?12 7 6 9?13 2 3 16

详情请参看:.tw/oddest/index.htm*/

??int i,j,k=1;/*??int t;*/??for(i=0;iN/4-1+N/2)???? for(j=0;jN/4-1)??????for(j=N-1;j>=0;j--)???? {?????? a[i][j]=k;?????? k++;???? }??}??/*将标记位进行整体翻转换位*/?? for(j=N/4;j

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值