【♂Not The Triumph♂O(∩_∩)O哈哈~But The Struggle♂】

竞赛决不是捷径,它只是另一种艰辛的生活方式。得到与失去,只有时间会去评判;成功与失败,只有历史能去仲裁。我不会永远成功,正如我不会永远失败一样

  C++博客 :: 首页 :: 联系 ::  :: 管理
  6 Posts :: 239 Stories :: 25 Comments :: 0 Trackbacks

常用链接

留言簿(7)

我参与的团队

搜索

  •  

积分与排名

  • 积分 - 108434
  • 排名 - 229

最新评论

阅读排行榜

评论排行榜

农夫约翰从来只用调配得最好的饲料来为他的奶牛。饲料用三种原料调配成:大麦,燕麦和小麦。他知道自己的饲料精确的配比,在市场上是买不到这样的饲料的。他只好购买其他三种混合饲料(同样都由三种麦子组成),然后将它们混合,来调配他的完美饲料。
给出三组整数,表示 大麦:燕麦:小麦 的比例,找出用这三种饲料调配 x:y:x 的饲料的方法。

例如,给出目标饲料 3:4:5 和三种饲料的比例:

1:2:3  
3:7:1 
2:1:2

你必须编程找出使这三种饲料用量最少的方案,要是不能用这三种饲料调配目标饲料,输出“NONE”。“用量最少”意味着三种饲料的用量(整数)的和必须最小。
对于上面的例子,你可以用8份饲料1,2份饲料2,和5份饲料3,来得到7份目标饲料:
8*(1:2:3) + 1*(3:7:1) + 5*(2:1:2) = (21:28:35) = 7*(3:4:5)

表示饲料比例的整数,都是小于100(数量级)的非负整数。表示各种饲料的份数的整数,都小于100。一种混合物的比例不会由其他混合物的比例直接向加得到。
 
PROGRAM NAME: ratios
INPUT FORMAT

Line 1: 三个用空格分开的整数,表示目标饲料
Line 2..4: 每行包括三个用空格分开的整数,表示农夫约翰买进的饲料的比例

OUTPUT FORMAT
输出文件要包括一行,这一行要么有四个整数,要么是“NONE”。前三个整数表示三种饲料的份数,用这样的配比可以得到目标饲料。第四个整数表示混合前三种饲料后得到的目标饲料的份数。

SAMPLE INPUT (file ratios.in)
3 4 5
1 2 3
3 7 1
2 1 2

SAMPLE OUTPUT (file ratios.out)
8 1 5 7

【参考程序】:

/*
ID: XIONGNA1
PROG: ratios
LANG: C++
*/
#include
<iostream>
using namespace std;
int x[4];
int gcd(int x,int y)
{
    
if (x==0return y;
    
else return gcd(y%x,x);
}
int main()
{
    freopen(
"ratios.in","r",stdin);
    freopen(
"ratios.out","w",stdout);
    
int a,b,c,p,ans;
    
for (int i=0;i<=3;i++)
    {
        scanf(
"%d%d%d",&a,&b,&c);
        x[i]
=a*10000+b*100+c;
    }
    p
=x[0];
    
for (int i=1;i<=3;i++) p=gcd(p,x[i]);
    
for (int i=0;i<=3;i++) x[i]/=p;
    ans
=101;
    
for (int i=0;i<=99;i++)
        
for (int j=0;j<=99;j++)
            
for (int k=0;k<=99;k++)
                
if (!(i==0 && j==0 && k==0))
                    
if ((i*x[1]+j*x[2]+k*x[3])%x[0]==0)
                    {
                        p
=(i*x[1]+j*x[2]+k*x[3])/x[0];
                        
if (p>100break;
                        
if (p<ans)
                        {
                            ans
=p;
                            a
=i; b=j; c=k;
                        }
                    }
    
if (ans==101) printf("NONE\n");
    
else printf("%d %d %d %d\n",a,b,c,ans);
    
return 0;
}
posted on 2009-07-24 14:06 开拓者 阅读(399) 评论(0)  编辑 收藏 引用 所属分类: USACO 题解

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