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 }