此题我的算法思想很简单,两罐的水容量之差的倍数一定可以通过倒水得到;
每通过一组倒水动作就能得到差的一个倍数,每次加一倍;
结果就是wrong answer,可能是我考虑的不完善,希望大家帮忙提提意见,我的错在哪;
本人也在苦苦思索啊。。。。
#include<iostream>
using namespace std;
int t;
bool times(int a,int b,int c)
{
int m = b-a;
if(c%m!=0){cout<<"impossible"<<endl;return false;}
else{
t = c/m; //代表倒水次数(一组动作的次数)
return true;
}
}
int main()
{
int a,b,c;
int n[2];
bool temp;
cin>>a>>b>>c;
if(a>b){n[0]=1,n[1]=2;temp=times(b,a,c);}
if(a<b){n[0]=2,n[1]=1;temp=times(a,b,c);}
if(c==a){cout<<1<<endl<<"FILL(1)"<<endl;}
else if(c==b){cout<<2<<endl<<"FILL(2)"<<endl;}
else
{
//第一组动作两步就可以,以后开始就要4步完成一组动作;
//每组动作后就可以得到 n倍的两桶容量的差值
if(temp){if(t==1){cout<<2<<endl<<"FILL("<<n[0]<<")"<<endl<<"POUR("<<n[0]<<","<<n[1]<<")"<<endl;}
else{
cout<<(t-1)*4+2<<endl;
cout<<"FILL("<<n[0]<<")"<<endl<<"POUR("<<n[0]<<","<<n[1]<<")"<<endl;
while(t>1){
cout<<"DROP("<<n[1]<<")"<<endl<<"POUR("<<n[0]<<","<<n[1]<<")"<<endl;
cout<<"FILL("<<n[0]<<")"<<endl<<"POUR("<<n[0]<<","<<n[1]<<")"<<endl;
t--;
}
}
}
}
}