笔试题之五升容器与三升容器取出四升水来
九月 25th, 2009 by 寻道者
有个群友去一家公司面试,笔试题有中这样一题:无限量的水, 3L的水桶和5L的水桶各一个。 求怎么得出4升水。 要写程序, 别写步骤。 中文谁都会写。(考官这样说的)
这样的题目初看起来非常简单,但如何用编程的方式去实现,就需要一定的建模基础了。
下面贴出代码:
public class GetWater
{
public static void main(String args[])
{
Case c = new Case();
c.setFiveCase(get5Water(false));// 往5升容器中放满水
set3Water(c);// 5升容器往3升容器倒水
c.setThreeCase(get3Water(true));// 清空3升容器
set3Water(c);// 5升容器往3升容器倒水
c.setFiveCase(get5Water(false));// 往5升容器中放满水
set3Water(c);// 5升容器往3升容器倒水
System.out.println("Three:" + c.getThreeCase());
System.out.println("Five:" + c.getFiveCase());// 最后5升容器还有4升水
}
/**
* 5容器往3容器放水
*
* @param water
* @return
*/
public static void set3Water(Case c)
{
int water = c.getFiveCase() > Case.THREE ? (Case.THREE - c.getThreeCase() > 0 ? Case.THREE - c.getThreeCase() : 0) : c.getFiveCase();
c.setThreeCase(water);
c.setFiveCase(c.getFiveCase() - water);
}
/**
* 得到/清除5升水
*
* @isDelete true is clear Case Water,false is Full Water
* @return
*/
public static int get5Water(boolean isDelete)
{
return isDelete ? 0 : 5;
}
/**
* 得到/清除3升水
*
* @isDelete true is clear Case Water,false is Full Water
* @return
*/
public static int get3Water(boolean isDelete)
{
return isDelete ? 0 : 3;
}
}
class Case
{
/**
* 5升水容器的最大容量
*/
public static final int FIVE = 5;
/**
* 3升水容器的最大容量
*/
public static final int THREE = 3;
/**
* 5升容器
*/
private int fiveCase;
/**
* 3升容器
*/
private int threeCase;
public int getFiveCase()
{
return fiveCase;
}
public void setFiveCase(int fiveCase)
{
this.fiveCase = fiveCase;
}
public int getThreeCase()
{
return threeCase;
}
public void setThreeCase(int threeCase)
{
this.threeCase = threeCase;
}
}