文章

28

粉丝

0

获赞

98

访问

3.5k

头像
喝饮料 题解:记得第二次循环后清除数据
P1478 云南大学机试题
发布于2025年3月19日 21:17
阅读数 112

#include <bits/stdc++.h>
using namespace std;
struct node{
float milk;
float widget;
float danjia; //单价
};

bool cmp(node a,node b)
{
	return a.danjia<b.danjia;
};
int main()
{
int x;
int n;
vector<node> shop;  //由于后续要采用push_back()方法,故不设大小
while(cin>>x>>n)
{
	shop.clear();  //第二轮循环若继续计算,要对shop里面的数据进行清除,即重新开始;不然数据只能过60%
	if(x<0 || n<0) break;
	while(n--)
	{
		float milk,widget,danjia;
		cin>>milk>>widget;
		danjia=widget/milk;
		shop.push_back({milk,widget,danjia});
	}//上述完成饮料和价格输入;
	sort(shop.begin(),shop.end(),cmp);
	float total=0; //记录已买容量
	for(int i=0;i<shop.size();i++){
	if(x>=shop[i].widget)
	{
		x-=shop[i].widget;
		total+=shop[i].milk;
	}else if(x>0)   {
			total+=(x/shop[i].danjia);
            break;
		}
		 
	}
	printf("%.3f\n",total);
}
return 0;
}

 

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发