有三个无刻度瓶,大瓶A容量大于中瓶和小瓶的容量,。设有液体体积为 x+y;x和y为奇数。中瓶B的容积为x,小瓶C的容量为 y;试用这三个瓶。使大瓶和中瓶里各盛液体(x+y)/2;
下面给出中文表述的算法:
大瓶倒中瓶,中瓶倒小瓶,小瓶倒大瓶。
中瓶不空不倒入。
小瓶不满不倒出。
中瓶不空不倒入保证了大瓶倒入中瓶液体为0或者为中瓶体积。小瓶不满不倒出保证了小瓶倒入大瓶液体量或为0或为小瓶体积。倒液顺序保证了不产生列循环。
#include<iostream.h>
#include<stdio.h>
#define X 47
#define Y 35
void main(){
int a=(X+Y);
int b=0;
int c=0;
do
{
if(b==0)
{b=X;a=a-X;cout<<a<<" "<<b<<" "<<c<<endl;}
if(b+c>=Y)
{b=b+c-Y;c=Y;
cout<<a<<" "<<b<<" "<<c<<endl;}
else
{c=c+b;b=0;
cout<<a<<" "<<b<<" "<<c<<endl;}
if(c==Y)
{c=0;a=a+Y;cout<<a<<" "<<b<<" "<<c<<endl;}
}while((a!=(X+Y)/2)&&(b!=(X+Y)/2));
}