题目内容见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"); } } else while(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; }