赈灾救济粮采购

赈灾救济粮采购

题目描述
 
  
某年某月某日某地发生了洪涝灾害,政府为了解决灾民的生活问题,在第一时间下拨了一定数量的救灾经费用于去市场采购大米(散装)再分发给灾民。如果市场上有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--;
		}
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值