这是一道模拟题
#include<stdio.h> #include<iostream> using namespace std; int main() { int ca,cb,n; while(cin>>ca>>cb>>n)//ca,cb,n分别表示a水壶的容量,b的容量和要求的量n { int bnow;//b水壶现在的容量 int b=0; 一开始b中的水为0,(即b是空壶) while(b!=n)//只要b水壶不溢出,就让A水壶一直灌b水壶,水溢出的时候,b==0 { for(int i=0;i<=(cb-b)/ca;i++)//将a中的水向b倒,直至b满或是b==n { cout<<"fill A"<<endl; cout<<"pour A B"<<endl; bnow = b+ca*(i+1);//没灌进一次a水壶的容量的水,b中的水量值 if(bnow==n)如果在某一次后,b中的==n { break;//不再灌 } } if(bnow==n) { break; } cout<<"empty B"<<endl;//如果b已经被灌满了,但还是!=n,那么将b中的水全部倒掉 int a; a=ca-(cb-b)%ca;//a中剩余的水量 cout<<"pour A B"<<endl; b=a;//将b清空后,把a中剩余的水倒进b中 if(b==n) { break; } } cout<<"success"<<endl; } return 0; }
本算法采用简化的方法,只是从A水壶向水壶B倒水,当b水壶满时就将b中的水倒掉,b成为空水壶,再从水壶A向b倒水,直到b水壶的水==n时.结束