波瓦松的分酒趣题。法国著名数学家波瓦松青年时代研究过一个有趣的数学问题:某人有12品脱的啤酒一瓶,想从中倒出6品脱,但他没有6品脱的容器,仅有一个8品脱和一个5品脱的容器,怎样倒才能将啤酒分为两个6品脱呢?
**输入格式要求:"%d%d%d%d" 提示信息:"Input Full a,Empty b,c,Get i:"
**输出格式要求:" a%d b%d c%d\n%4d%4d%4d\n" "%4d%4d%4d\n"
程序运行示例如下:
Input Full a,Empty b,c,Get i: 12 8 5 6
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
a12 b5 c8
12 0 0
7 5 0
7 0 5
2 5 5
2 2 8
10 2 0
10 0 2
5 5 2
5 0 7
0 5 7
0 4 8
8 4 0
8 0 4
3 5 4
3 1 8
11 1 0
11 0 1
6 5 1
6 0 6
#include<stdio.h>
int i;
get(int a, int y, int z)
{
int b = 0, c = 0;
printf(" a%d b%d c%d\n%4d%4d%4d\n" , a, y, z, a, b, c);
while (a != i || b != i && c != i)
{
if (!b)
{
a -= y;
b = y;
}
else if (c == z)
{
a += z;
c = 0;
}
else if (b > z - c)
{
b -= (z - c);
c = z;
}
else
{
c += b;
b = 0;
}
printf("%4d%4d%4d\n", a, b, c);
}
}
geti(int a, int z, int y)
{
int b = 0, c = 0;
printf(" a%d b%d c%d\n%4d%4d%4d\n" , a, y, z, a, b, c);
while (a != i || b != i && c != i)
{
if (!b)
{
a -= y;
b = y;
}
else if (c == z)
{
a += z;
c = 0;
}
else if (b > z - c)
{
b -= (z - c);
c = z;
}
else
{
c += b;
b = 0;
}
printf("%4d%4d%4d\n", a, b, c);
}
}
int main()
{
int a, b, c;
printf("Input Full a,Empty b,c,Get i:");
scanf("%d%d%d%d", &a, &b, &c, &i);
get(a, b, c);
get(a, c, b);
return 0;
}