UVA 571 Jugs ADD18 小白书10 数学Part1 专题

 只能往一个方向倒,如c1=3,c2=5,a b从0 0->0 5->3 2->0 2->2 0->2 5->3 4->0 4->3 1->0 1->1 5->3 3->0 3->0 0,又回到了0 0,而且倒着推回去正好是c1一直往c2倒,因为0*c2%c1->1*c2%c1->...->c1*c2%c1==0

 1 #include <iostream>
 2 #include<cstdio>
 3 
 4 using namespace std;
 5 
 6 int a,b,n,c1,c2;
 7 
 8 void slove()
 9 {
10     puts("fill B");
11     if(c2==n)
12     {
13         puts("success");
14         return;
15     }
16     b=0;
17     while(1)//用b一直往a倒,在n!=a时b必定先达到n,若a往b倒时a达到n还要倒到b那
18     {
19         b+=c2;
20         while(b>c1)
21         {
22             puts("pour B A");
23             b-=c1;
24             if(b==n)
25             {
26                 puts("success");
27                 return ;
28             }
29             puts("empty A");
30         }
31         puts("pour B A");
32         puts("fill B");
33     }
34 }
35 
36 int main()
37 {
38     while(scanf("%d%d%d",&c1,&c2,&n)==3)
39     {
40         if(n==0||n>c2)
41         {
42             puts("success");
43             continue;
44         }
45         slove();
46     }
47     return 0;
48 }
View Code

 

posted @ 2015-10-04 11:35  cdongyang  阅读(226)  评论(0编辑  收藏  举报