
1个回答
2014-01-22
展开全部
想知道5*5方阵,7*7方阵,9*9方阵的答案,那么请继续看此文章:)
【全文】
当我写程序求解的时候,我是以5*5的为例。一开始用穷举法,先用5个循环判循环组合一组5个的数,如果这5个数的和等于(1+2+..+25)/25。那么保存到数组。然后再用5个循环,来遍历组合已经保存到数组的那5个数来组成方阵。如果方阵横竖斜和都等于(1+2+..+25)/25。那么输出结果。
这个是穷举法的思路,并且是绝对可行的。但是你如果用此方法的话,或许我们要等N年以后才能得到结果了。呵呵。(穷举法代码用注释方式附在程序中了的。)
而除了穷举法外,就是利用规律-德国人罗伯特的方法!
【罗伯法】
把1(或最小的数)放在第一行正中;
按以下规律排列剩下的N2-1个数:
1)每一个数放在前一个数的右上一格;
2)如果这个数所要放的格已经超出了顶行那么就把它放在底行,仍然要放在右一列;
3)如果这个数所要放的格已经超出了最右列那么就把它放在最左列,仍然要放在上一行;
4)如果这个数所要放的格已经超出了顶行且超出了最右列那么就把它放在前一个数的下一行同一列的格内;
5)如果这个数所要放的格已经有数填入,处理方法同4)。
使用这个规律,求解就相当简单了!
具体程序实现部分,请下载源代码观看就OK了,有很详细的注释的:)
下面附上部分程序求解的答案:
5*5:
17 23 1 8 15
22 5 7 14 16
4 6 13 20 21
10 12 19 25 3
11 18 24 2 9
9*9: 47 57 68 79 1 12 23 34 45
56 67 78 9 11 22 33 44 46
66 77 8 10 21 32 43 54 55
76 7 18 20 31 42 53 63 65
6 17 19 30 41 52 62 64 75
16 27 29 40 51 61 72 74 5
26 28 39 50 60 71 73 4 15
36 38 49 59 70 81 3 14 25
37 48 58 69 80 2 13 24 35
【全文】
当我写程序求解的时候,我是以5*5的为例。一开始用穷举法,先用5个循环判循环组合一组5个的数,如果这5个数的和等于(1+2+..+25)/25。那么保存到数组。然后再用5个循环,来遍历组合已经保存到数组的那5个数来组成方阵。如果方阵横竖斜和都等于(1+2+..+25)/25。那么输出结果。
这个是穷举法的思路,并且是绝对可行的。但是你如果用此方法的话,或许我们要等N年以后才能得到结果了。呵呵。(穷举法代码用注释方式附在程序中了的。)
而除了穷举法外,就是利用规律-德国人罗伯特的方法!
【罗伯法】
把1(或最小的数)放在第一行正中;
按以下规律排列剩下的N2-1个数:
1)每一个数放在前一个数的右上一格;
2)如果这个数所要放的格已经超出了顶行那么就把它放在底行,仍然要放在右一列;
3)如果这个数所要放的格已经超出了最右列那么就把它放在最左列,仍然要放在上一行;
4)如果这个数所要放的格已经超出了顶行且超出了最右列那么就把它放在前一个数的下一行同一列的格内;
5)如果这个数所要放的格已经有数填入,处理方法同4)。
使用这个规律,求解就相当简单了!
具体程序实现部分,请下载源代码观看就OK了,有很详细的注释的:)
下面附上部分程序求解的答案:
5*5:
17 23 1 8 15
22 5 7 14 16
4 6 13 20 21
10 12 19 25 3
11 18 24 2 9
9*9: 47 57 68 79 1 12 23 34 45
56 67 78 9 11 22 33 44 46
66 77 8 10 21 32 43 54 55
76 7 18 20 31 42 53 63 65
6 17 19 30 41 52 62 64 75
16 27 29 40 51 61 72 74 5
26 28 39 50 60 71 73 4 15
36 38 49 59 70 81 3 14 25
37 48 58 69 80 2 13 24 35
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询