随笔 - 40, 文章 - 0, 评论 - 19, 引用 - 0
数据加载中……

Pku 2142 The Balance

说说这个题目,大家一般都将这个问题抽象成了数学问题来解决,但是我的解法是最直接的枚举,观察题意可知,对每一组数据应该有两种 天平的出解情况,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

posted on 2008-07-19 20:55 hadn't 阅读(457) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理