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