题目内容见zoj1005
由于A,B互素且A的容量小于B,那么可以将B装满并且倒入A中,如果A被装满则将A中的内容全部清空,一直进行下去直到某一刻B中容量恰好等于目标的容量。这种方法能得到正确的结果,但是通常得不到最优结果。
#include <stdio.h>int main(void) {int a,b,target,i;int curA,curB;while(scanf("%d %d %d", &a, &b, &target) == 3 ){curA = curB = 0;if(target == b){printf("fill B\n");}else if(target % a == 0){for(i = 1; i <= target/a; i++){printf("fill A\n");printf("pour A B\n");}}elsewhile(curB != target){curB = b;/* printf("curB:%d\n",curB);*/printf("fill B\n");while(curB >= a-curA){curB -= a-curA;/* printf("curB:%d\n",curB);*/printf("pour B A\n");if(curB == target)break;printf("empty A\n");curA = 0;}if(curB == target)break;curA += curB;printf("pour B A\n");}printf("success\n");}return 0; }