用3公升和5公升没有刻度的水杯量出4公升

公司一个同事面试遇到 的算法题,感觉挺有意思的

class Program
{
abstract class Cup
{
protected int MaxVolumn { get; set; }
protected int Volumn { get; set; }
public int Fill()
{
Volumn = MaxVolumn;
return Volumn;
}
public int Fill(int volumn)
{
Volumn += volumn;
if (Volumn > MaxVolumn)
Volumn = MaxVolumn;
return Volumn;
}
public int Fill(Cup cup)
{

if (Volumn + cup.Volumn > MaxVolumn)
{
cup.Volumn = Volumn + cup.Volumn - MaxVolumn;
Volumn = MaxVolumn;
}
else
{
Volumn += cup.Volumn;
cup.Volumn = 0;
}
return Volumn;
}
public void Empty()
{
Volumn = 0;

}
public override string ToString()
{
return "杯子里现在的水量是:" + Volumn.ToString();
}
}
class Cup3 : Cup
{
public Cup3()
{
MaxVolumn = 3;
}

}
class Cup5 : Cup
{
public Cup5()
{
MaxVolumn =5;
}

}
static void Main(string[] args)
{

#region 新算法 感谢 “牛C的低调”

Cup cup5_1,cup5_2;
cup5_1 = new Cup5();
cup5_2 = new Cup5();
Cup cup3 = new Cup3();
cup5_1.Fill();
cup3.Fill(cup5_1);
cup5_2.Fill();
cup3.Empty();
cup3.Fill(cup5_2);
cup5_1.Fill(cup5_2);
Console.WriteLine("完成!!第1个5升" + cup5_1.ToString());

#endregion

 #region 原来自己的笨算法

//cup3.Fill();
//Console.WriteLine("第1个3升"+cup3.ToString());
//Console.WriteLine("第1次开始倒水");
//cup5.Fill(cup3);
//Console.WriteLine("结束倒水");
//Console.WriteLine("结束倒水第1个3升" + cup3.ToString());
//Console.WriteLine("结束倒水第1个5升" + cup5.ToString());
//cup3.Fill();
//Console.WriteLine("第2次开始倒水");
//Console.WriteLine("第1个3升" + cup3.ToString());
//cup5.Fill(cup3);
//Console.WriteLine("结束倒水");
//Console.WriteLine("结束倒水第1个3升" + cup3.ToString());
//Console.WriteLine("结束倒水第1个5升" + cup5.ToString());

//Console.WriteLine("将5升杯子清空" );
//cup5.Empty();
//Console.WriteLine("清空后第1个5升" + cup5.ToString());
//Console.WriteLine("第3次开始倒水!将上一次3升杯子中水倒入5升杯子里,再将3升充满后再倒入5升杯内");
//cup5.Fill(cup3);
//cup3.Fill();
//cup5.Fill(cup3);
//Console.WriteLine("完成!!第1个5升" + cup5.ToString());

#endregion
Console.Read();
}
}

原文地址:https://www.cnblogs.com/zhshlimi/p/5332318.html