?? 泊松分酒.txt
字號:
#include "iostream.h"
void practise(int a,int bv,int cv)
{
int b=0,c=0,i,n=0;
i=a/2;
cout<<"Ways:\n";
cout<<"bottle"<<a<<" bv"<<bv<<" cv"<<cv<<endl;
cout<<" "<<a<<" "<<b<<" "<<c<<endl;
while(a!=i||b!=i&&c!=i)
{if(!b) {a-=bv;b=bv;}
else if(c==cv) {a+=cv;c=0;}
else if(b>cv-c) {b-=(cv-c);c=cv;}
else {c+=b;b=0;}
cout<<" "<<a<<" "<<b<<" "<<c<<endl;
n++;
}
cout<<n<<" step(s)\n";
}
int probe(int a,int bv,int cv)
{
int n=0,b=0,c=0,i;
i=a/2;
while(a!=i||b!=i&&c!=i)
{if(!b)
if(a<bv) {n=-1;break;}
else {a-=bv;b=bv;}
else if(c==cv){a+=cv;c=0;}
else if(b>cv-c) {b-=(cv-c);c=cv;}
else {c+=b;b=0;}
n++;
}
return(n);
}
int main(int argc, char* argv[])
{
int a,bv,cv;
while(cin>>a>>bv>>cv)
{
int m1,m2,n;
if(bv==a/2||cv==a/2) {
cout<<"Ways:\n";
cout<<"bottle"<<a<<" bv"<<bv<<" cv"<<cv<<endl;
cout<<" "<<a<<" 0"<<" 0"<<endl;
if(bv==a/2) cout<<" "<<a/2<<" "<<a/2<<" 0"<<endl;
else cout<<" "<<a/2<<" 0"<<" "<<a/2<<endl;
cout<<"1 step(s)\n";
continue;}
if((bv<a/2&&cv<a/2)) {cout<<"IMPOSSIBLE\n";continue;}
if(bv/cv==2||cv/bv==2) {cout<<"IMPOSSIBLE\n";continue;}
m1=probe(a,bv,cv);
m2=probe(a,cv,bv);
if(m1<0&&m2<0) cout<<"IMPOSSIBLE\n";
if(m1>0&&(m2<0||m1<m2)) {
n=m1;practise(a,bv,cv);}
if(m2>0&&(m1<0||m2<m1)) {
n=m2;practise(a,cv,bv);}
}
return 0;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -