UVA571 - Jugs(数论)

来源:互联网 发布:百度新闻源排名优化 编辑:程序博客网 时间:2024/06/06 15:45

UVA571 - Jugs(数论)

题目链接

题目大意:给你A和B的水杯,给你三种操作:fill X:把X杯里面加满水。empty X:把X杯中的水清空。pour X Y 把X的水倒入Y中直到一方满或另一方空为止。然后要求你得到C的水量,给出实现步骤。

解题思路:因为A,B互质,n属于【1,B - 1】则n%B=n。那么nA%B= n%BA%B = nR,因为AB互质所以nA不可能整除B。现在要求得到水量n,那么只要使得R == 1就可以得到想要的水量。这样只要控制A的系数就可以得到想要的水量,所以步骤就是不停的将A的水倒入B中,直到等于目标水量。只是倒入的时候需要判断一下A是否是空还是B是否是满,对应将他们填满或是清空。

代码:

#include <cstdio>#include <cstring>int A, B, C;void solve() {    int ca, cb;    ca = cb = 0;    while (1) {        if (ca == C || cb == C) {            printf ("success\n");            return;        }        if (ca == 0) {            printf ("fill A\n");            ca = A;        } else if (cb == B) {            printf("empty B\n");            cb = 0;        } else {            printf ("pour A B\n");            if (cb + ca > B) {                ca = cb + ca - B;                cb = B;                } else {                cb += ca;                ca = 0;            }        }    }}int main () {    while (scanf ("%d%d%d", &A, &B, &C) != EOF) {        solve();        }    return 0;}

0 0
原创粉丝点击