说说这个题目,大家一般都将这个问题抽象成了数学问题来解决,但是我的解法是最直接的枚举,观察题意可知,对每一组数据应该有两种 天平的出解情况,a*x==b*y+d和a*x+d==b*y
对每一种情况按照人放东西的方法来枚举,如果天平的一边重了,就在另一边放上那个a或者b
最后比较两组解哪个更满足题目的答案并输出即可。
附上AC代码
1Problem: 2142 User: hongtaozhy
2Memory: 288K Time: 0MS
3Language: G++ Result: Accepted
4
5Source Code
6#include<stdio.h>
7int x,y;
8void meiju(int a , int b , int d ){
9
10 x=0;y=0;
11 while(1){
12 if(a*x<b*y+d) {
13 if (y==0&&(d-a*x)%b==0){
14 y=(d-a*x)/b;
15 break;
16 }
17 x++;
18 continue ;
19 }
20 if(a*x==b*y+d){
21 break;
22 }
23 else
24 y++;
25 }
26}
27
28int main(){
29
30 int a , b , d;
31 int xx,yy;
32 while(scanf("%d%d%d",&a,&b,&d)&&a&&b&&d){
33 meiju(a,b,d);
34 xx=x;yy=y;
35 // printf("1:%d %d\n",x,y);
36 meiju(b,a,d);
37 // printf("2:%d %d\n",y,x);
38 if(x+y<xx+yy)
39 printf("%d %d\n",y,x);
40 else
41 if((x+y==xx+yy)&&a*x+b*y<a*xx+b*yy)
42 printf("%d %d\n",y,x);
43 else
44 printf("%d %d\n",xx,yy);
45 }
46
47
48return 0;
49}
50
51
52