额,这个题目其实以前就做过,当时感觉好复杂啊,所以就没有仔细想过。今天重新拾起久违的ACM,发现此题貌似当需要容量大于A罐容量时,只要沿着从B罐向A罐的方向一直进行,就会有最后的结果(小于A罐时方向相反)。
终于明白,有些事,远没有你想想的那么复杂。。。。。
#include <iostream>
using namespace std;
int main()
{
int Ca,Cb,Cc,Ra,Rb;
while(cin>>Ca>>Cb>>Cc)
{
Ra=Rb=0;
if(Cb==Cc)
{
cout<<"fill B"<<endl;
cout<<"success"<<endl;
continue;
}
if(Ca==Cc)
{
cout<<"fill A"<<endl;
cout<<"pour A B"<<endl;
cout<<"success"<<endl;
continue;
}
while(Rb!=Cc)
{
if(Ca<Cc)
{
if(Rb==0)
{
cout<<"fill B"<<endl;
Rb=Cb;
}
if(Ra==Ca)
{
cout<<"empty A"<<endl;
Ra=0;
}
if(Rb>=(Ca-Ra))
{
Rb-=(Ca-Ra);
Ra=Ca;
}
else
{
Ra+=Rb;
Rb=0;
}
cout<<"pour B A"<<endl;
}
else{
if(Ra==0)
{
cout<<"fill A"<<endl;
Ra=Ca;
}
if(Rb==Cb)
{
cout<<"empty B"<<endl;
Rb=0;
}
if(Ra==Cc)
{
cout<<"pour A B"<<endl;
//cout<<"success"<<endl;
Rb=Ra;
continue;
}
if(Ra>=(Cb-Rb))
{
Ra-=(Cb-Rb);
Rb=Cb;
}
else
{
Rb=Rb+Ra;
Ra=0;
}
cout<<"pour A B"<<endl;
}
}
cout<<"success"<<endl;
}
return 0;
}