九宫格的解题过程汇编_第1页
九宫格的解题过程汇编_第2页
免费预览已结束,剩余27页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、九宫格的解题过程 第 1 步首先计算每行数字之和。 1 9 九个数字之和:1 + 2 + 3 + 4+ 5+ 6+ 7+ 8+ 9 = 45 九宫格共有三行,并且每行的数字之和相等,因此 45/3= 15,即每行数字之和为15。 第 2 步计算中间格的数字。 考虑第 2 行,第 2 列,和 2条对角线的数字之和。它们的总和为 15/4 = 60。在它们的总和中,中 间格子的数字出现了 4次,其它位置格子的数字都出现了而且仅出现了 1 次。 所以,它们的总和=(4X中间格子的数字)+ (其它8个数字) =(3灿间格子的数字)+ ( 1 9九个数字之和) 因此,60 = 3灿间格子的数字+ 45,

2、中间格子的数字等于5 第 3 步,奇数不能出现在 4 个角上的格子里。 比如,如果数字 9出现在角上的格子里,那么为了保证 9所在行或所在列的数字和为 15,必须需 要4个数字,两两之和必须为 6。 1, 2, 3, 4, 6, 7, 8中,只有 2和4组成和为 6的数字对,找到第 2个和为 6的数字对是不可能的。因此,数字 9不能出现在 4个角上的格子里。 同样道理, 1, 3, 7也不能出现在 4个角上的格子里。 第 4 步,2,4,6,8必须填在 4 个角上的格子里,并且保证对角线数字和为 15。 第 5 步,将 1,3,7,9 填入相应的格子里就完成了九宫格填数字任务,注意和为 15

3、的 条件。 完成了填九宫格的任务后,我们进一步考虑,如果上面九宫格内所有数字都加数字 1 会发生什么 呢?即可不可以用数字 2, 3, 4, 5, 6, 7, 8, 9, 10填九宫格,得到每一行,每一列,每一对角线的 三个数字之和都相等的新九宫格呢。 显而易见, 上面九宫格每行每列每对角线数字之和为 18,奇数 3, 5, 7, 9处在 4个角上的格子里, 中间数 6处在中间的格子里。 从19和210各九个数字所填充的九宫格可以得出下列规律: 1) 九个数字是由 9 个相连的整数构成的。 2) 九个数字中正中间的数字填在九宫格的中间格子里。 19中的 5, 2-10中的 6等。 3) 每行每

4、列的数字和等于中间数字的三倍。比如 15= 53和18=63。 4) 第 2, 4, 6, 8位的数字填充到 4个角上的格子里。如 2, 3, 4, 5, 6, 7, 8, 9, 10中的 3, 5, 7, 9和1, 2, 3, 4, 5, 6, 7, 8, 9中的2, 4, 6, 8。 问题 1:已知 9 个相连的整数填充的九宫格其每行数字和为 45,求这九个 数字。中间格数字为45?3= 15, 15为正中间的数字,因此九个数字为 11, 12, 13, 14, 15, 16, 17, 18, 19。 问题 2:已知 9 个相连的整数填充的九宫格其每行数字和为 96, 求九宫格 4 个角上

5、格子里的数 9623 = 32,得到九个数字为 28, 29, 30, 31, 32, 33, 34, 35, 36。4个角上的数字为 29, 31, 33, 35,其中 35 和 29为对角关系, 31 和 33 为对角关系。 问题3:成公差为d (d!=0 )的等差数列是否也填九宫格?比如公差为 3 的等差数列, 1,4,7,10,13,16,19,22,25,如何填九宫格呢? 5,15, 25,35,45,55,65,75,85 又怎样填? 古人说, “学贵有疑。小疑则小进,大疑则大进 ”。在学习中,我们要注意归纳和演绎能力的培养, 总结一些规律,不但增加了学习的有效性和趣味性,对理解和

6、掌握有关问题也很有益处。培育创新型 人才既是学校和老师的责任,也是我们学生要刻意磨练的目标。本文通过详解九宫格问题,得到了一 些有意义的结论和规律,而这些规律的获得使我们对九宫格问题也有了更加深入的认识。幻方的求解 三阶 幻方的解法 第一种:杨辉法:九子斜排,上下对易,左右相更,四维挺出。 1 2 4 3 5 7 6 8 9 2 9 4 7 5 3 6 1 8 第二种:九宫图也是幻方的别称,三阶幻方就是著名的洛书,他的排列是:“戴九履一,左三右七, 二四为肩,六八为足,五居中央( 9在上中, 1在下中。 3在左中, 7在右中, 2在左上, 4在右上, 6 在左下, 8 在右下) 第三种:罗伯法

7、:最小的数据上行中央,依次向右上方斜填,上出框往下写,右出框往左填,排重便 在下格填,右上排重一个样 8 1 6 3 5 7 4 9 2 四阶幻方的解法 1、先把这 16个数字按顺序从小到到排成一个 4乘 4的方阵 2、内外四个角对角上互补的数相易, (方阵分为两个正方形,外大内小,然后把大正方形的四个对角 上的数字对换,小正方形四个对角上的数字对换)即 (1,16)(4,13)互换 (6,11)(7,10)互换 16 2 3 13 5 11 10 8 9 7 6 12 4 14 15 1 另: 对于 n=4k 阶幻方,我们先把数字按顺序填写。写好后,按 4*4 把它划分成 k*k 个方阵。因

8、为 n 是 4 的倍数,一定能用 4*4 的小方阵分割。然后把每个小方阵的对角线,象制作 4 阶幻方的方法一样, 对角线上的数字换成互补的数字,就构成幻方。 五阶幻方的解法: 罗伯法:最小的数据上行中央,依次向右上方斜填,上出框往下写,右出框往左填, 排重便在下格填,右上排重一个样。 17 24 1 8 15 23 5 7 14 16 4 6 13 20 22 10 12 19 21 3 11 18 25 2 9 (在最上一行的中间填 1,接着在 1的右上方填 2,由于 1在最上一行 , 所以 1 的右上方应该是第五行的第四个 , 接下来在 2的右上方填 3,3的右上方应该是第三行第一个 ,所

9、以在此填 4,在 4 的右上方填 5, 在 5 的下方填 6,接着按前面五个数的填法依次填 7,8,9,10; 在 10 的下方填 11,然后按上面的方法填 , 每次填五个数 ,直到完成 . 无论从上到下还是从左到右都是五排 , 所以每排的五个数之和为(1+2+3+4+25) - 5=65, 因此 ,你可以验算一下是否每个和都是 65. 此法适合于一切奇阶幻方 .)数独游戏 数独,据说最先是在瑞典,后来到美国,然后到日本被发扬光大。这个游戏,进入了今年上海交大的自主招生试 题一一最后一道大题就是数独题。 5 4 7 3 8 2 6 9 1 2 8 弓 9 1 6 5 1 4 9 1 6 5 4

10、 7 8 3 二 4 5 8 2 3 9 1 6 3 9 4 7 1 2 8 5 7 2 1 6 5 8 3 4 9 3 6 2 7 9 5 4 1 8 1 7 5 8 6 4 9 2 3 8 9 4 1 2 3 7 5 6 上面的图片中,红色是在玩游戏前给出的数字,蓝色的数字就是后填的。 游戏的规则很简单,每一行填入 1 19 9 九个数字,每一列也填入 1 1 9 9 九个数字,但同时要满足每一个九宫格中也 包含 1 19 9 九个数字,也就是说每一个九宫格中也填入 1 1 9 9 九个数字。 4 9 2 3 5 7 8 1 6 此图的特别之处就是横行纵列加上两条对角线上的三个数字之和均为

11、 1515。 类似于这样的问题,也称之为幻方,像上面的九宫格,可称为 3 3 阶幻方(因每行,每列,两条对角线上数字个数 是 3 3),还有 4 4 阶、5 5 阶、6 6 阶等。此外还可分为奇阶幻方和偶阶幻方。九宫格就属于奇阶幻方。 下面是个五阶幻方。 11 18 25 2 9 10 12 19 21 3 4 6 13 20 22 23 5 i 14 16 17 24 1 8 15 幻方的填写是有规律的,我想通过上面两个两个幻方可以找到一些规律。 偶阶幻方的填写规律比奇阶幻方要稍微 复杂一一小声点说,我还不是太明白,还在继续学习中。 练习1 完成一道数独游戏题吧,说不定下回哪个考试也会有这样

12、的题呢! 4 6 8 2 8 1 3 9 1 9 8 3 5 7 2 8 1 2 5 7 4 练习 2:3 阶幻方三个数的和是 15,5 阶幻方五个数的和是 65,你能说出 7 阶幻方中七个数的和 是多少吗?进一步,你能说出奇阶幻方中 和是多少吗? 练习 3: 完成一个 7 阶幻方。n 个数字的 叵 回回口可 叵旦叵 003 比如说三阶幻方,先向外翻折扩展,然后按上图左二的规律,按顺序写上 1 1- -9 9 的数字,接下来幻方之外的数,按左往 右仍,右往左仍,上往下扔,下往上扔的规律填进幻方,将其余的删去,就得到一个横竖斜都等于 1515 的幻方了! 下图是五阶幻方的解法,方法相同,只是规模

13、大了点。 口口 = 0 0叵回叵 回回回国 R回固 snE16 因 也叵回叵叵 回因回 E1 回S国 卫口国西回旦回口国 SRE1辺叵匡区 m回H回回 回 EDM 卫nEr-lN SO0D0B 七阶幻方如下:(唉,上面那种做图太累,后面的图就来自于互联网了。) 7 6 14 36 44 43 只要按照这个方法,无论多少阶,只要是个奇数,都可以画得出来,至少一个!你可以奸诈一点,比 如说画好菱形后,1的起始位置是可以换的,写的方向也是可以换的,但是最后出来的幻方本质上是 一样的。 对于偶数呢,最小是4阶的,四阶的幻方老师也讲了一个解法,就是大对角线换,小对角线也换。步 骤如下: 先按顺序写出1-

14、16的数在4阶幻方里面,如下: 1 2 3 4 5 6 T 8 9 10 11 12 13 14 15 16 接下来所谓的大对角线换,小对角线换就是1和16换,4和13换,6和11,7和10,换完就出来了: 1 15 14 4 5 13 21 29 37 45 35 42 12 -6- 7 9 8 10 11 5 13 3- 2 16 横竖斜都是34。 然后问题就来了,有没有办法可以解出任意高偶数阶的幻方的方法呢? 我曾经很傻很天真的试图把4阶这种换对角线的方法推广到6阶,但是怎么弄都未果,估计这种方法 对于4阶只是种巧合吧。 后来大学玩matlab后,发现matlab里面函数magic可以输

15、出任意阶的幻方,哦,soga,原来真的有 的啊。 后来我就对着matlab里面magic的源文件写出了这个C+版本,只是为了巩固自己对四阶的理解罢 了。 然后下面整理一下一般的偶数阶幻方的解法,解法来源于互联网。 首先一般的偶数阶解法都是把偶数分成两种, 4,8,12,16这种4m的双偶数和6,10,14这种4m+2的单 偶数,一般的解法都是分开来两类的, 包括matlab里面的magic函数,不过查了一下也有很多大牛研 究出了统一解法,更有大神把奇偶阶全部同意了,膜拜 ing。 双偶数解法:偶数阶下面先讲简单的双偶数解法,看了很多解法,但是最后发现了一个通解,网上看 到的大部分解法都是这个通

16、解的特例。 首先呢,如下图所示,先把n阶幻方分成4个小块,对于左上角那个你任意的把一半放个填成灰色, 但是有一个约束条件,就是左上角这个小块中每一行每一列都要只有 n/4个灰色的。然后呢,右上的 那个小块的填色方案就是左上填色方案的左右镜像对称,左下的就是左上天色方案的上下镜像对称, 自然,右下就是左上的中心对称了。如下图所示: 然后呢,你把1-n2这么多个数按顺序填 进白色的格子里去,灰色的部分要留着。如下面左图所示: 现在我们来讨论一下这种方法, 首先看我们原本的四阶幻方的解法, 有没有发现其实和这种方法是 个东西。 8阶幻方: 1 62 63 4 5 59 58 8 56 10 11 5

17、3 52 14 15 49 48 18 19 45 44 22 23 41 25 39 38 28 29 35 34 32 33 31 30 36 37 27 26 40 24 42 43 21 20 46 47 17 16 50 61 13 12 54 55 9 57 7 6 60 61 2 3 64 然后再看看双偶数阶的另一种解法,比如说下面这个 这里的解法呢,就是把整个幻方分成 2X2个4X4的 小块,按顺序填好1-64个数,然后每个4X4小块的对角线上的数不变,其余的数做中心对称 再看看下面这个: 按顺序填好数,然后每个4X4小块的对角线上的数不变,其余的数做中心对称。 虽然和我最开始

18、的那种分法不一样,但是你仔细一想,其实是完全一样的,只是他的填色方案是固定 的一种模式而已。 还有一种说法是每个小块对角线上的数换成互补的那个数,其实本质还是一样嘛。 F面是一个双偶数的matlab程序,我填色方案用时是国际象棋棋盘那种黑白相间。 fun cti on a = hf_4m( n) flag = zeros( n/2,n /2); flag(1:2: n/2,1:2: n/2) = 1; flag(2:2: n/2,2:2: n/2) = 1; flag = flag fliplr(flag);flipud(flag) flipud(fliplr(flag); a = resha

19、pe(1: nnn); a = a .* flag; a = reshape(a,1, nT); bla nk_idx = fin d(a=0); number_left = (1:nA2) .* (a=0); nu mber_left = fliplr(setdiff( nu mber_left,O);1 143 142 4 5 139 138 8 9 135 134 12 132 14 15 129 128 18 19 125 124 22 23 121 120 2 27 117 116 30 31 113 112 34 35 109 37 107 1C6 40 41 103 102 44

20、 45 99 98 48 49 95 94 52 53 91 90 56 57 07 06 60 84 62 63 81 80 66 67 77 76 70 71 73 72 74 75 69 68 78 79 65 64 82 83 61 S5 59 58 88 89 55 54 92 93 51 50 96 97 47 豪 100 101 43 42 104 105 39 38 10& 36 110 111 33 32 114 115 29 28 118 119 25 24 122 123 21 20 126 127 17 16 130 13 133 11 10 136 137 7

21、 6 140 141 3 2 144 12阶,分成3X3个4X4的小块,和之前一样, a(bla nk_idx) = nu mber_left; a = reshape(a ,n,n); 单偶数解法:下面来看看单偶数的解法,这种现在主要有两种方法,分区法和易位法。其中呢,分区 法也有两种。 先说分区法,首先呢就是把方阵划分成下面 A,B,C,D四块,因为是单偶数,所以每一块必然是个奇数 幻方。 然后把1n2/4这些数组成的奇数阶幻方算出来,填 进A里面,然后接下来的n24的幻方填进D里面,(其实有个很简单的方法,就是把 A里面的每个数 加上n24就可以了),再把D里面的加上n2/4放到B里面,

22、最后那些放到C里面。下面是10阶幻方 的一个例子: A B C D 先假设阶数是4k+2,那么k=(n-2)/4,然后下面是第一种方法: 从A小块的中间行中间格开始(上图中的13),向右找k个数(包括中间行中间格那个),和 C小块 的相应位置的数换位。A小块的其他行(也就是除了最中间那一行)从最左开始数出 k个数,和C中 相应位置的数换。 括B小块中间那一列),然后这些列和 D小块中相应未知的数换位。(6阶k-1=0,就不用了)然后下面的东西有点拗口,但是细细读就会明白了: B小块中间列开始,向左数 K-1列出来(当然也包 92 99 1 8 5 67 74 26(58 65 98 so ?

23、11 16 看 B2 64 66 p 88 95 22 56 38 70 陌85 87 19 21 3 |60 62 44 71 53 86 93 25 2 9 61 68 50 52 59 17 24 76 8 9 42 495 (10 23 n 82 89 同 30 57 39 4 79 81 13 2097 29 31 63 45 47 10 12 94 96 78 35 37 69 46 加11 18 100(77 |84 応43 75 27 34 然后就完成了 14阶幻方的换位方式如下: 151 176 159 37 2Q 45 28 102 127 H H 118 143 126

24、182 158 133 19 44 27 3 133 109 L 142 125 101 157 189 165 43 26 2 34 108 140 124 100 132 41 17 49 172 148 180 9 139 115 99 131 107 1&3 195 171 7 32 8 40 114 146 1 A 130 106 138 1&4 170 153 31 14 39 15 145 121 - 112 137 113 169 152 177 13 38 21 46 120 103 136 119 144 4 29 12 184 167 192 175 53

25、 78 110 135 B9 &4 77 35 II 北 166 191 174 150 84 60 134 117 93 76 52 10 42 13 190 173 149 181 59 91 116 141 75 51 83 188 164 196 25 1 33 156 90 66 147 123 50 82 58 lfi 4B 24 154 179 155 1S7 6E 97 122 105 81 57 89 47 23 6 178 161 162 96 72 104 129 闘 8& 64 22 5 30 160 185 168 193 71 54 128 Ill

26、87 70 95 这种方法的matlab函数如下: fun cti on a = hf_4m_2 (n) a(1: n/2,1: n/2) = magic( n/2); a(n /2+1: n,n /2+1: n) = a(1: n/2,1: n/2) + n A2/4; a(1: n/2,n /2+1: n) = a(1: n/2,1: n/2) + 门八2/4*2; a(n /2+1: n,1: n/2) = a(1: n/2,1: n/2) + 门八2/4*3; m = (n /2-1)/2; temp = a( n/2+1)/2,( n/2+1)/2:( n/2+1)/2+m-1);

27、a( n/2+1)/2,( n/2+1)/2:( n/2+1)/2+m-1) = a( n/2+1)/2+n/2,( n/2+1)/2:( n/2+1)/2+m-1); a( n/2+1)/2+n/2,( n/2+1)/2:( n/2+1)/2+m-1) = temp; temp = a(setdiff(1: n/2,( n/2+1)/2),1:1+m-1); a(setdiff(1: n/2,( n/2+1)/2),1:1+m-1) = a(setdiff(1: n/2,( n/2+1)/2)+n/2,1:1+m-1); a(setdiff(1: n/2,( n/2+1)/2)+n/2,1:

28、1+m-1) = temp; if (m1) temp = a(1: n/2,n *3/4+1/2-m+2:n *3/4+1/2); a(1: n/2,n *3/4+1/2-m+2: n*3/4+1/2) = a(1+ n/2:n,n *3/4+1/2-m+2: n*3/4+1/2); a(1+ n/2:n,n *3/4+1/2-m+2: n*3/4+1/2) = temp; end 然后还有一种换位方法,A小块中间那一行第2列开始往右数k个数,和C小块中相应位置的数换位, A小块中其余行都从最左开始向右数 k列,这些数也和C小块的做交换。B小块中,从最右开始向左 数k-1个列,与D中相应位置

29、的数换位,结果也是一样的。这种方法 matlab代码如下: fun cti on a = hf_4m_2 (n) a = zeros( n,n); a(1: n/2,1: n/2) = magic( n/2); a(n /2+1: n,n /2+1: n) = a(1: n/2,1: n/2) + n 八2/4; a(1: n/2,n /2+1: n) = a(1: n/2,1: n/2) + 门八2/4*2; a(n /2+1: n,1: n/2) = a(1: n/2,1: n/2) + 门八2/4*3; m = (n /2-1)/2; temp = a( n/2+1)/2,2:2+m-1

30、); a(n /2+1)/2,2:2+m-1) = a( n/2+1)/2+n/2,2:2+m-1); a(n /2+1)/2+n/2,2:2+m-1) = temp; temp = a(setdiff(1: n/2,( n/2+1)/2),1:1+m-1); a(setdiff(1: n/2,( n/2+1)/2),1:1+m-1) = a(setdiff(1: n/2,( n/2+1)/2)+n/2,1:1+m-1); a(setdiff(1: n/2,( n/2+1)/2)+n/2,1:1+m-1) = temp; if (m1) temp = a(1: n/2,n :-1: n-m+2

31、); a(1: n/2, n:-1: n-m+2) = a(1: n/2)+n/2,n:-1: n-m+2); a(1: n/2)+n/2,n:-1: n-m+2) = temp; end 这两中方法为什么可行我还没仔细研究, 但是刚刚编程发现一个很神奇的现象, 就是第一种方法的BD 小块交换规则配上第二种方法的 AC小块交换规则,也是可以的。囧。 对于单偶数的幻方,还有一种杨辉创造的二阶方阵易位法(我发现杨辉老兄很喜欢玩数阵)。 对于n = 4m+2阶幻方,先用奇数阶的方法做出一个 2m+1阶幻方来,然后把1n2那么多个数4个一 组,分成(2m+1)2个组,1,2,3,45,6,7,89,1

32、0,11,12 分别称为第1组,第2组,第3组第(2m+1)2 组。 接下来那每一组四个数按下面的方法放入 2X2的方阵中: 然后把之前那个2m+1阶幻方,每个位置上的数如果是i,那 么就换成第i组2X2方阵,这样就有了一个nXn的方阵了,但是这个方阵还不是幻方,需要再修正。 我们继续讨论刚才那一个2m+1阶幻方,假设我们n=14,那么2m+1 = 7,对于下图中这个7阶的方 阵,我们把倒数第二行染绿,然后从中间那一行开始向下知道倒数第三行为止全部染蓝,如果中间那 一行就是倒数第二行,那么不染蓝。10 11 12 9 2 3 4 1 7 7 6 8 四个数对应于上图的一个格。我们现在做如下操作

33、,如果是绿色的格子,那么 2X2方阵的最下面两个 数交换,如果是蓝色格子的话,2X2方阵不仅下面两个数交换,而且上面两个数也要交换 F面举个例子: 对于14阶幻万,先生成一个7阶幻万 30 39 4S 1 10 19 2& 38 : 7 9 18 27 29 46 6 8 ; 26 35 37 5 14 16 34 36 45 13 15 24 33 42 44 4 21 23 32 41 43 3 12 |31 40 49 11 20 然后把相应位置填上相应的2阶方阵:口 口口口口口 口 口口口 口接下来在把最左和最右两列的染色向下拉一格。如下图: 口 口口口口口我们知道对应于刚刚做

34、出来的那个 nn的方阵,每2X2方阵, 118 119 154 155 190 1911 2 3 38 39 74 Y5 110 111 120 117 156 153 192 189 4 1 40 37 re ?3 112 109 150 151 186 187 26 27 34 35 70 71 106 107 114 115 152 149 18S 185 28 25 36 33 72 69 108 105 116 113 182 183 23 66 67 102 103 1J;J 139 146 147 184 181 21 32 29 I 6S 65 104 101 140 137

35、14S 145 18 19 54 65 eT S3 99 134 1 142 143 178 179 20 17 樹53 64 61 1UJ 97 136 133 144 141 180 1?7 50 51 fee 94 95 iso 131 166 167 174 175 14 15 52 49 60 57 96 93 132 129 168 165 176 175 16 13 B2 B3 90 91 12S 127 1S2 163 170 171 10 11 46 47 84 81 92 128 125 164 16: 172 169 12 9 48 45 86 S7 122 123 15

36、8 159 1 194 195 6 7 42 43 73 79 88 85 124 121 100 1&7 196 193 8 5 44 41 80 77 上下都换,就得到结果啦 118 112 154 155 190 131 2 3 3& 39 74 75 110 111 120 117 156 153 192 189 4 1 40 37 76 73 112 109 150 151 186 18? 26 27 34 35 70 71 106 107 114 115 152 149 188 1S5 28 2E 36 33 72 69 10S 105 116 113 iaF 18

37、3 肚 23 51 66 67 102 103 138 130 146 147 113 119 154 155 190 191 2 3 38 39 74 75 110 111 120 117 156 153 192 189 4 1 40 37 76 73 112 109 150 151 186 187 2S 27 &4 35 70 71 106 107 114 115 152 149 188 18b 28 25 36 33 72 69 108 105 116 113 182 1S3 22 23 30 31 66 67 102 103 1芟 139 146 14? 184 1S1 24

38、21 32 29 68 65 104 101 140 137 148 145 绿色格子下面两个数换位, 蓝色的 184 181 24 21 32 29 68 65 104 101 140 137 148 145 18 19 :55 54 63 62 99 98 135 134 143 142 178 179 20 17 53 56 61 64 97 100 133 136 141 144 180 177 51 50 田 58 95 94 131 130 167 166 175 174 15 14 49 52 5? 60 93 96 129 132 165 168 1?3 176 13 16 S

39、3 82 90 91 126 127 162 163 170 1?1 10 11 47 46 si 84 89 92 125 128 161 164 169 172 9 12 J 45 4S 86 S? 122 123- 158 159 194 195 6 7 42 43 7S 79 85 88 124 121 ISO 157 196 193 S E 44 41 77 80 杨辉易位法代码如下: fun cti on a = hf_4m_2_yiwei (n) h = magic( n/2); a = zeros( n,n); for i = 1 : n/2 for j = 1 : n/2 a

40、(i*2-1:i*2,j*2-1:j*2) = 2 3;4 1 + (h(i,j)-1)*4; end end flag = zeros( n/2,n /2); flag( n/2-1,:) = 1; %下面两个互换 if (n 6) flag( n/2+1)/2: n/2-2,:) = 2; %t面下面都要换 end flag(2: n/2,1 n /2) = flag(1: n/2-1,1 n /2); for i = 1 : n/2 for j = 1 : n/2 if (flag(i,j) 0) temp = a(i*2,j*2-1); a(i*2,j*2-1) = a(i*2,j*2

41、); a(i*2,j*2) = temp; end if (flag(i,j) = 2) temp = a(i*2-1,j*2-1); a(i*2-1,j*2-1) = a(i*2-1,j*2); a(i*2-1,j*2) = temp; end end end 哟西,好了,终于写的差不多了。自个研究了一下,收获颇多。不过幻方可不仅仅是构造那么简单, 以前看的一本书里面有各种变态的幻方,什么切尾幻方什么的。还有很多数学上的东西,下面提问, 请证明:偶数阶幻方行列式值一定是 0! 下面附上一个很多年前改写 matlab的magic函数的C+代码: #in clude #i ncludevioma

42、 nip.h class magic public : int *m; magic(); magic( int n); magic(magic & c); void show(); int size; ; magic:magic(magic &c) int n=c.size; size=n; m= newint *n; for (int k=O;kn;k+) mlk=c.mlk;magic:magic( int n) size=n; for (int l=0;l n;l+) ml= newint n; m= newint *n; for (int l=0;ln;l+) ml= newint n; for (int k=0;kn;k+) mlk=0; void magic:show() for (int l=0;lsize;l+) for (int k=0;ksize;k+) coutsetw (3) mlk coute ndl; coute ndl; magiccreatmagic( int n) int l,k;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论