|
|
#19
xufen3402009-09-09 20:44
//改好了,现在随便你玩了,都可以平衡,死循环也会告诉你,这个程序就这样结束吧。
#include<iostream>
using namespace std;
void movewater(int const& avolume,int const& bwater,int const& cvolume);
void move(int const& fromvolume ,int const& tovolume,int & fromwater,int & towater);
int main()
{
int avolume,bvolume,cvolume;
//输入2个a,c瓶子体积
cin>>avolume>>bvolume>>cvolume;
movewater(avolume,bvolume,cvolume);
}
void movewater(int const& avolume,int const& bvolume,int const& cvolume)
{
int awater,bwater,cwater;
int i=1;
//a瓶子装满水,b,c等待装水。
awater=avolume;
bwater=0;
cwater=0;
//循环倒水
while(awater!=cwater){
//如果c瓶为空,则a倒入c
if((cwater==0)){
move(avolume,cvolume,awater,cwater);
cout<<avolume<<"("<<awater<<")"<<",";
cout<<bvolume<<"("<<bwater<<")"<<",";
cout<<cvolume<<"("<<cwater<<")"<<endl;
}
//如果b瓶为空,则c倒入b
else if(bwater==0){
move(cvolume,bvolume,cwater,bwater);
cout<<avolume<<"("<<awater<<")"<<",";
cout<<bvolume<<"("<<bwater<<")"<<",";
cout<<cvolume<<"("<<cwater<<")"<<endl;
}
//如果b瓶为满,则b倒入a
else if(bwater==bvolume){
move(bvolume,avolume,bwater,awater);
cout<<avolume<<"("<<awater<<")"<<",";
cout<<bvolume<<"("<<bwater<<")"<<",";
cout<<cvolume<<"("<<cwater<<")"<<endl;
}
//如果b瓶不满也不空,则c倒满b。
else if(bwater<bvolume){
move(cvolume,bvolume,cwater,bwater);
cout<<avolume<<"("<<awater<<")"<<",";
cout<<bvolume<<"("<<bwater<<")"<<",";
cout<<cvolume<<"("<<cwater<<")"<<endl;
}
//如果和第一次重复了,那就不能达到平衡。
int astate,bstate,cstate;
if(i==1){
astate=awater;
bstate=bwater;
cstate=cwater;
}else{
if((astate==awater)&&(bstate==bwater)&&(cstate==cwater)){
cout<<"program go into dead"<<endl;
break;
}
}
i++;
}
}
//倒入
void move(int const& fromvolume ,int const& tovolume,int & fromwater,int & towater)
{
/*
*第一个瓶子向第二个瓶子最大限度倒入
*/
if(fromwater>=(tovolume-towater)){
fromwater=fromwater-(tovolume-towater);
towater=tovolume;
}else{
towater=towater+fromwater;
fromwater=0;
}
}
|