题意:两个水壶,分别给出两只水壶的容量和所要获得的水量。倒水是有规则的,刚开始两个水壶都是空的,倒水时要倒满,当A向B倒水时,倒完后其中一个水壶要为空,所以就相当于每次操作,其中一个水壶必须为空的。
思路:因为题目给出0 < ca <= cb, N < cb,并且ca与cb互质,所以只要每次A倒满,然后倒入B,如果B满了之后,再全倒掉,一直重复,知道得到cb = N
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int main() {
int ca, cb, na, nb, n;
while (scanf("%d %d %d", &ca, &cb, &n) != EOF) {
if (cb == n) {
printf("fill B\n");
printf("success\n");
continue;
}
na = nb = 0;
while (nb != n) {
if (na == 0) {
printf("fill A\n");
na += ca;
}
if (nb == cb) {
printf("empty B\n");
nb = 0;
}
nb += na;
na = 0;
if (cb < nb) {
na = nb - cb;
nb = cb;
}
printf("pour A B\n");
}
printf("success\n");
}
return 0;
}