平分水问题
大家小时候是否做过这样一道题? 有一个8升的瓶子装满水,还有一个5升的空瓶子和一个3升的空瓶子。要求将水分成两个4升
现在要用程序解这种题,算出结果示例如下(下面引自hat给出的一个代码的执行答案)(怕影响思路的先不要看)
假设是n升的水平分,最短的步骤是n-1次
Your containers: 8 5 3
Solution1 step0: 8-->0-->0
Solution1 step1: 3-->5-->0
Solution1 step2: 3-->2-->3
Solution1 step3: 6-->2-->0
Solution1 step4: 6-->0-->2
Solution1 step5: 1-->5-->2
Solution1 step6: 1-->4-->3
Solution1 step7: 4-->4-->0
Solution1 step0: 8-->0-->0
Solution1 step1: 3-->5-->0
Solution1 step2: 3-->2-->3
Solution1 step3: 6-->2-->0
Solution1 step4: 6-->0-->2
Solution1 step5: 1-->5-->2
Solution1 step6: 1-->4-->3
Solution1 step7: 4-->4-->0
其实这道题并不只有一种,还有 12 7 5 的杯子 平分为 6 6 0
16 9 7 的杯子,在第一个杯有16升的水,平分为8升。
整个题目一般类型是 2n n+1 n-1 的杯子 把存的2n的水,平分为 n n 0
但是,像 10 6 4 这样的,不可能平分为 5 5 0 。因为10 6 4 都是偶数,它们之间不可能
加减得出一个奇数5。
所以又有10 7 3的题型, 这类题有无数种,谁能给出一个通用的解法并做出解释。
(小弟在此先谢谢了,通用代码见过,但是没找到解释)
[ 本帖最后由 if_exist 于 2009-10-1 15:35 编辑 ]