您的位置:首页 > 其它

HDOJ_2178真饿了

2017-05-29 00:16 169 查看

                                                     真饿了

问题描述:
受灾人员最急待解决的显然是温饱问题,救灾部队一边在组织人员全力打通交通,一边在组织采购粮食。现在假设下拨了一定数量的救灾经费要去市场采购大米(散装)。如果市场有m种大米,各种大米的单价和重量已知,请问,为了满足更多灾民的需求,最多能采购多少重量的大米呢?

输入:

输入数据首先包含一个正整数C,表示有C组测试用例,每组测试用例的第一行是两个整数n和m(0<n<=1000,0<m<=1000),分别表示经费的金额和大米的种类,然后是m行数据,每行包含2个整数p和h(1<=p<=25,1<=h<=100),分别表示单价和对应大米的重量。
 
输出:

[align=left][/align]
对于每组测试数据,请输出能够购买大米的最多重量(你可以假设经费买不光所有的大米)。

每个实例的输出占一行,保留2位小数。

样例输入:

1
7 2
3 3
4 4

样例输出:

2.33

简单粗心,代码如下:

#include<stdio.h>
struct dm
{
double je;                 //金额
double zl;                 //质量
}a[1010],t;

int main()
{
int i,j,k,T;
double m,n;
scanf("%d",&T);
while(T--)
{
double sumzl=0;               //sumzl计算总重量
double sumje=0;               //sumzl计算总金额
scanf("%lf%lf",&m,&n);
for(i=0;i<n;i++)
scanf("%lf%lf",&a[i].je,&a[i].zl);

if(m==0) {
printf("0\n");
break;
}
for(i=0;i<n-1;i++)            //把单位金额少的数组放前面
for(j=0;j<n-i-1;j++)
if(a[j].je>a[j+1].je)
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}

for(i=0;i<n;i++){
if(sumje<m)
{
sumje+=a[i].je*a[i].zl;
sumzl+=a[i].zl;
}
if(sumje==m) break;     //当总金额等于m的时候要退出循环,否则(sumje-m)=0在后面会被作为余数处理
if(sumje>m)
{
sumzl-=(sumje-m)/a[i].je;
break;
}
}
printf("%.2lf\n",sumzl);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: