该帖已经被评为精华帖
|
|
---|---|
作者 | 正文 |
发表时间:2006-11-18
题目: 求解如下
通过分析,可以得到如下断言为真(采用上面设定及术语): 根据所得断言,可以得到如下求导公式和约束: A2,A3,A5为可变量,但是A2,A3,A5不等于2,3 程序实现 java 代码
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2006-11-18
后来一考虑,发现以上实现并不完整,把八个整数的特例1,2,3...8作为了题目的一部分,加强了题目约束。
如果完整的实现该题目,8个整数应该是作为参数输入系统,且也不能假定这些整数两两不等 |
|
返回顶楼 | |
发表时间:2006-11-19
暴力算法(in Haskell):
module Main where import List --参数值 node = [1..8] --所有排列 permutation [] = [[]] permutation xs = [x:ys | x <- xs, ys <- permutation (delete x xs)] --约束条件 condition (a1:a2:a3:a4:a5:a6:a7:a8:xs) = (a1 + a2 == a7 + a8) && (a1 + a3 == a6 + a8) && (a2 + a4 == a5 + a7) && (a3 + a4 == a5 + a6) && (a1 + a5 == a4 + a8) && (a2 + a6 == a3 + a7) --筛选(并去重复,如果参数值里有重复的话) result = nub (filter condition (permutation node)) --打印个数 main = print (length result) 结果有144个,约束只使用按原题简化的‘对边相等’条件,便于以后用任意8个参数值做实验,比如[2,2,3,3,5,6,7,8]有24个结果。然后可以考虑一下何时无解的问题。。。 |
|
返回顶楼 | |
发表时间:2006-11-19
个人认为,解决这种问题,暴力的方法是穷举,那么相对不暴力的是回溯
只从题目上来看,唯一的判定条件是 引用 正方体六个面上的四个角点整数之和相等
而 引用 1、每个面的面积相等,且每个面的面积为36/2,即18 2、正方体的对边相等,如A1A2=A7A8、A2A6=A3A7等等 是由人推断出来的,对这个题目各种输入都成立的断言,其他断言不具有普遍意义,所以只能用于特定输入,这点上面已经提到了 所以这种问题需要遍历所有的可能性,因此提高效率的途径莫过于简化判定条件和尽早终止对某一分支的遍历(回溯) 在楼上思路的基础上,把类似a1=1,a2=2,a3=3,a4=4这种明显不成立的情况排除,就可以大幅减少判断次数,这时候效率就比较高了 PS:楼上的代码还真清爽,Haskell很有意思,受教了,多谢 |
|
返回顶楼 | |
发表时间:2006-11-19
恩,我是说除了我引用的1和2,其他的都不算通用规则
|
|
返回顶楼 | |
发表时间:2006-11-20
按照8个整数可以是任意的正整数,修正上面三个断言后为
1、每个面的面积相等,且每个面的面积为(8个数的总和)/2; 2、正方体的对边相等,如A1A2=A7A8、A2A6=A3A7等等; 3、最小的三个数(如1,2,3)肯定不在同一边,最大的三个数肯定不在同一边(通过这一推论可以减少探索方案); |
|
返回顶楼 | |
发表时间:2006-11-20
1:从小到大排序,为了叙述方便假定得到数组v
2:如果v[0]+v[7]==v[1]+v[6]==v[2]+v[5]==v[3]+v[4]不成立则无解 3:输出v[0],v[7],v[6],v[1],v[5],v[2],v[3],v[4] |
|
返回顶楼 | |
发表时间:2006-11-20
不知道这个贴的精华之处在什么地方。让人脑代替电脑做特定思考似乎不是什么值得称道的事。
大家不妨思考一下足球的每个面上的顶点之和都相等解法。看看人脑可以帮电脑做些什么,电脑可以帮人脑做些什么。 |
|
返回顶楼 | |
发表时间:2006-11-20
3、最小的数(如1)不能和次小的两个(如2,3)在同一边,最大的不和次大的两个在同一边;
这样表述就没有问题了吧? |
|
返回顶楼 | |
发表时间:2006-11-20
hurricane1026 写道 jkit 写道 不知道这个贴的精华之处在什么地方。让人脑代替电脑做特定思考似乎不是什么值得称道的事。
大家不妨思考一下足球的每个面上的顶点之和都相等解法。看看人脑可以帮电脑做些什么,电脑可以帮人脑做些什么。 说实在的,我也不理解为什么这个是精华,可能是讨论算法的太少了吧。不过这个帖子里面的也算不上真正的算法。因为问题复杂度太低。你说的这个很有难度,等我找找足球的相关资料区。。。 欢迎大家贴出有意思的算法题目,一起研究 |
|
返回顶楼 | |