砝码称重问题和分红酒问题
砝码称重问题描述如下:5个砝码
用天平称重时,我们希望用尽可能少的砝码组合称出尽可能多的重量。
如果只有5个砝码,重量分别是1,3,9,27,81。则它们可以组合称出1到121之间任意整数重量(砝码允许放在左右两个盘中)。
本题目要求编程实现:对用户给定的重量,给出砝码组合方案。
例如:
用户输入:
5
程序输出:
9-3-1
用户输入:
19
程序输出:
27-9+1
要求程序输出的组合总是大数在前小数在后。
可以假设用户的输入的数字符合范围1~121。
分红酒问题描述如下:
有4个红酒瓶子,它们的容量分别是:9升, 7升, 4升, 2升
开始的状态是 [9,0,0,0],也就是说:第一个瓶子满着,其它的都空着。
允许把酒从一个瓶子倒入另一个瓶子,但只能把一个瓶子倒满或把一个瓶子倒空,不能有中间状态。这样的一次倒酒动作称为1次操作。
假设瓶子的容量和初始状态不变,对于给定的目标状态,至少需要多少次操作才能实现?
本题就是要求你编程实现最小操作次数的计算。
输入:最终状态(逗号分隔)
输出:最小操作次数(如无法实现,则输出-1)
例如:
输入:
9,0,0,0
应该输出:
0
输入:
6,0,0,3
应该输出:
-1
输入:
7,2,0,0
应该输出:
2
砝码称重我只想到穷举每个砝码的三种状态,但是我搜索到论坛里算法大神之一的czz5242199用了一种更快捷的方法,不过我看不懂他的思路。。。请各位大神通俗易懂一点解析一下czz5242199大神的方法
分红酒问题我不懂。。但是我想每个瓶子只有倒空和倒满二种状态。是否可以穷举每个瓶子的状态,如果瓶子不为空再穷举瓶子里酒的倒向而且要排除倒回上一个瓶子的情况,直到找出次数最少又符合状态要求的情况。。这想法看起来好混乱的样子应该不科学。。。求教各位大神们的做法