作者在 2011-12-27 09:20:51 发布以下内容
三个12L、8L、5L的无刻度杯子,12L的已装满水,怎样倒可以倒出2个6L的水
12L的杯子为:a12,8L的杯子为:b8,5L的杯子为:c5.输出每次倒水后,每个杯子中水的容量。
a12 b8 c5
12 0 0
..............
..............
6 6 0
思路:
1,若b8为空,把a12的水倒满b8或者倒完a12内的水。
2,若c5为空,把b8的水倒满c5或者倒完b8内的水。
3,若c5满,则把c5的水倒入a12中。
4,直到a12,b8的水为6L
#include<stdio.h>
int main()
{
int a12=12,b8=0,c5=0,t=0;
printf("a12\tb8\tc5\n");
printf("12\t0\t0\n");
while(1)
{
if(0==b8)
{
t=(a12>8)?8:a12;
b8+=t;
a12-=t;
printf("%d\t%d\t%d\n",a12,b8,c5);
}
if(0==c5)
{
t=(b8>5)?5:b8;
c5+=t;
b8-=t;
printf("%d\t%d\t%d\n",a12,b8,c5);
}
if(8==b8)
{
t=b8+c5-5;
b8=t;
c5=5;
printf("%d\t%d\t%d\n",a12,b8,c5);
}
if(5==c5)
{
c5=0;
a12+=5;
printf("%d\t%d\t%d\n",a12,b8,c5);
}
if(a12==6&&b8==6)
{
break;
}
}
return 0;
}
int main()
{
int a12=12,b8=0,c5=0,t=0;
printf("a12\tb8\tc5\n");
printf("12\t0\t0\n");
while(1)
{
if(0==b8)
{
t=(a12>8)?8:a12;
b8+=t;
a12-=t;
printf("%d\t%d\t%d\n",a12,b8,c5);
}
if(0==c5)
{
t=(b8>5)?5:b8;
c5+=t;
b8-=t;
printf("%d\t%d\t%d\n",a12,b8,c5);
}
if(8==b8)
{
t=b8+c5-5;
b8=t;
c5=5;
printf("%d\t%d\t%d\n",a12,b8,c5);
}
if(5==c5)
{
c5=0;
a12+=5;
printf("%d\t%d\t%d\n",a12,b8,c5);
}
if(a12==6&&b8==6)
{
break;
}
}
return 0;
}
VC++6.0运行通过。
结果如下:
a12 b8 c5
12 0 0
4 8 0
4 3 5
9 3 0
9 0 3
1 8 3
1 6 5
6 6 0
这道题纠结了我好久,找到的答案太高深,看不懂。我从书上找到一个相似的题。我根据上面的思路写的。