1.有3个容器,各是20升,13升,7升, 形状不同也不透明。一开始20升的容器里面装了20升水,反正倒来倒去最后要让20升和13升容器各装了10升水
2. 2个外形不同的瓶子,各装800毫升水,另外还有1个300毫升的杯子
现在有4个人,不限制喝的次数,想办法让每个人都正好喝到400毫升水
第一第二道题目,口头说明解法就行了
第三个题,就是从第一第二题里面随便选择一个,使用编程来求解
于是乎..觉得有趣.便做了起来...花了一个下午的时间..终于做出来了:
首先建了一个水杯类: //以下程序只是基于可运行..至于代码的可看性和性能,暂时还没做优化
public class Cut
{
private int _maxValue;//杯子的最大值
public int MaxValue
{
get
{
return _maxValue;
}
}
private int _currentValue;//杯子当前值
public int CurrentValue
{
get
{
return _currentValue;
}
set
{
_currentValue = value;
}
}
public Cut(int maxValue,int currentValue)
{
_maxValue = maxValue;
_currentValue = currentValue;
}
}
然后在控制台程序环境下:
class Program
{
private static List<int[]> valueList = new List<int[]>();//用于记录正确的步骤
private static int[] values = new int[3];//当前的步骤
private static Cut c7 = new Cut(7, 0);
private static Cut c13 = new Cut(13, 0);
private static Cut c20 = new Cut(20, 20);
static void Main(string[] args)
{
valueList.Clear();
ChangeCut(ref c7, ref c13, ref c20);
}
static bool GetDirection(int[] currentValues)//true表示可以继续下一次[节点不存在],false则反之[表示节点存在]
{
if (valueList.Count == 0)//第一次时.不