赈灾救济粮采购
题目描述
某年某月某日某地发生了洪涝灾害,政府为了解决灾民的生活问题,在第一时间下拨了一定数量的救灾经费用于去市场采购大米(散装)再分发给灾民。如果市场上有m家店出售大米,每家店大米的单价和重量已知,请问,为了满足更多灾民的需求,最多能采购多少重量的大米呢? 要求程序中先定义一个类Store表示米店,里面有price和weight两个成员变量分别表示店内大米的单价和总量;还要求该Store类实现了系统提供的接口Comparable(具体可查询JDK的API文档),重写接口中的比较方法,使得米店的自然顺序是按大米的 单价从低到高的顺序。用数组来保存m家米店的信息,并用Arrays.sort()对这些米店按单价排序,然后按单价从低到高的顺序在各家店中采购大米。
输入描述
输入数据首先包含一个正整数c,表示有c组测试用例,每组测试用例的第一行是两个整数n和m(0<n<=1000,0<m<=1000),分别表示经费的金额和米店的家数,然后是m行数据,每行包含2个整数p和h(1<=p<=25,1<=h<=100),分别表示该店大米的单价和库存量。
输出描述
对于每组测试数据,请输出能够购买大米的最多重量。 每个实例的输出占一行,保留2位小数。
输入样例
1 7 2 3 3 4 4
输出样例
2.33
import java.util.*;
class store
{
int n;
int m;
}
class mycmp implements Comparator<store>
{
public int compare(store a,store b)
{
return a.n-b.n;
}
}
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
int x,y,n,m,i,j;
Scanner in=new Scanner(System.in);
store [] a=new store[1000];
x=in.nextInt();
while(x>0)
{
n=in.nextInt();
m=in.nextInt();
for(i=0;i<m;i++)
{
a[i]=new store();
a[i].n=in.nextInt();
a[i].m=in.nextInt();
}
Arrays.sort(a,0,m,new mycmp());
double sum=0;;
for(i=0;i<m;i++)
{
if(n<=0)
break;
while(n>=a[i].n&&a[i].m>0)
{
n-=a[i].n;
sum++;
a[i].m--;
}
if(n<=0)
break;
if(a[i].m<=0)
continue;
if(n>0&&n<a[i].n&&a[i].m>0)
{
sum+=n*(1.0/a[i].n);
n=0;
}
}
System.out.printf("%.2f\n", sum);
x--;
}
}
}