题目:
泊松是法国数学家、物理学家和力学家。他一生致力科学事业,成果颇多。有许多著名的公式定理以他的名字命名,比如概率论中著名的泊松分布。
有一次闲暇时,他提出过一个有趣的问题,后称为:“泊松分酒”。在我国古代也提出过类似问题,遗憾的是没有进行彻底探索,其中流传较多是:“韩信走马分油”问题。
有3个容器,容量分别为12升,8升,5升。其中12升中装满油,另外两个空着。要求你只用3个容器操作,最后使得某个容器中正好有6升油。
只有b2瓶子为空时,b1才往b2瓶子里倒酒
只有瓶子b3为空时,b2才往b3瓶子里倒酒
只有瓶子b3为满时,b3才往b1瓶子里倒酒
#include<iostream>
using namespace std;
int b1=12;
int b2=8;
int b3=5;
int m=6;//目标酒量
/*
bb1 the wine in b1 now
bb2 the wine in b2 now
bb3 the wine in b3 now
*/
void backBottle(int bb1,int bb2,int bb3)
{
cout<<"bb1:"<<bb1<<" ";
cout<<"bb2:"<<bb2<<" ";
cout<<"bb3:"<<bb3<<endl;
if(bb1 ==m || bb2 ==m || bb3 ==m)//分出目标酒量
{
cout<<"ok"<<m;
return;
}
if(bb2!=0&&bb3!=b3) //b3not enough
{
if(bb2+bb3<=b3) // if bb2+bb3<=b3,then put bb2 in bb3 go
{
backBottle(bb1,0,bb2+bb3);
}else // if bb2+bb3>b3,then let bb2 -(b3-bb3) ,with b3 go
{
backBottle(bb1,bb2-(b3-bb3),b3);
}
}else if(bb3 ==b3) //if now = target begin put bb1 from bb3
{
if(bb3+bb1<=b1)//if sum(bb3+bb1)<=b1
{
backBottle(bb1+bb3,bb2,0); //all of them put in b1
}else //if b1 not enough space
{
backBottle(b1,bb2,bb3-(b1-bb1));//use b3 to save the more wine
}
}else if(bb2==0) {
if(bb1<=b2) {
backBottle(0,bb1,bb3);
}else {
backBottle(bb1-b2,b2,bb2+bb3);
}
}
}
int main()
{ int a,b,c;
cin>>a;
cin>>b;
cin>>c;
backBottle(a,b,c);
}