http://blog.sina.com.cn/s/blog_ac9074a201018uyf.html
感谢这位大人精彩思路的分享。
一、倒水问题
1.只有两个容器,容量分别为a,b,要量出c升的水。
穷举法实现其基本思想为:用小桶容量的倍数对大桶的容量进行取余。比如3升的桶和5升的桶得到4升水可以这样做:
3 % 5 = 3 //小桶装水倒入大桶,小桶空,大桶有小桶的水量,不等于要求的水量。继续下一步
6 % 5 = 1 //再来一次,小桶装水倒入大桶,大桶溢出,倒掉,再进行把剩余的小桶剩下一升倒入,大桶此时有一升的水量,不等于要求的水量。继续下一步
9 % 5 = 4 //再来一次,小桶装水倒入大桶,小桶空,大桶是上一步剩下的一升加上此时小桶的三升,等于要求的水量。终止程序。
成功得到4升水。
同样,用7升的桶和11升的桶得到2升水可以这样做:
7 % 11 = 7 //小桶装水倒入大桶,小桶空,大桶有小桶的水量七升,不等于要求的水量。继续下一步
14 % 11 = 3 //小桶装水倒入大桶,小桶空,大桶溢出,倒掉,再进行把剩余的小桶剩下三升倒入,大桶此时有三升的水量,不等于要求的水量。继续下一步
21 % 11 = 10 //小桶装水倒入大桶,小桶空,大桶有上一步剩下的三升再加上此时小桶的七升,不等于要求的水量。继续下一步
28 % 11 = 6 //小桶装水倒入大桶,小桶空,大桶溢出,倒掉,再进行把剩余的小桶剩下六升倒入,大桶此时有六升的水量,不等于要求的水量。继续下一步
35 % 11 = 2 //小桶装水倒入大桶,小桶空,大桶溢出,倒掉,再进行把剩余的小桶剩下二升倒入,大桶此时有二升的水量,等于要求的水量。终止程序。
成功得到2升水。
代码实现如下:
#include<stdio.h>
int dump(int,int,int);
int main(void)
{
int a,b,c,status;
scanf("%d%d%d",&a,&b,&c);
/* a = 2;b&