作业帮 > 数学 > 作业

杯子分水问题有12L水装在一个12L的杯子中 现在又一个 4L 和 9L 的杯子,问如何才能分出6L水?求一般解法 如果

来源:学生作业帮 编辑:作业帮 分类:数学作业 时间:2024/07/14 14:31:46
杯子分水问题
有12L水装在一个12L的杯子中 现在又一个 4L 和 9L 的杯子,问如何才能分出6L水?
求一般解法 如果将杯子容积变化一下呢?譬如 4L 8L
求所有分法(杯子容积任选,2个即可 12L的那个不变 杯子容积在1-12L内整数取值)
这是今天看5*3想到的 我想出5L 8L的了
一般解法也有,我这儿有一个程序,无论你怎么改变杯子的容积,都可以求出最优的分法.
#include "stdio.h"
int max[3]={12,9,4};
int a=12,b=0,c=0;
void f1() /*12->9*/
{
a=a-(max[1]-b);
b=max[1];
}
void f2() /*9->4*/
{
if(b>=max[2])
{
b=b-(max[2]-c);
c=max[2];
}
else
{
c=b;
b=0;
}
}
void f3() /*4->12*/
{
a=a+c;
c=0;
}
main()
{
int i=1;
for(;;i++)
{
if(c==max[2])
f3();
else if(b>c)
f2();
else f1();
printf("%d %d %d\n",a,b,c);
if(a==6&&b==6)
break;
}
printf("%d\n",i);
}
通过main函数可以看到:
假设三个杯子容量为a=12,12>b>c>0;
则:
1.当c杯子满的时候,将c倒入a中.否则2
2.当杯子水量大于c杯子水量时,将b倒入c中.否则3
3.将a倒入b中.
这样得到的一定是最优解.
不好意思,回复晚了!