棒棒糖(结构体)(类似前面循环的上树问题)

题目描述

新年快到了,计算机学院新年晚会正在筹备中,今年有一个新创意:来参加晚会的所有学生都有礼物(一根棒棒糖)。老师把买棒棒糖的任务交给小明了,并指定了要买的棒棒糖的品牌和品种。俗话说得好,货比三家不吃亏。小明来到了商店,看了各个店铺里这种棒棒糖的价格,不仅如此,他还记住了每个店铺的存货量。已知小明打算购买n根棒棒糖,问他最少要花多少钱?

输入

第一行输入一个整数n,表示要购买的棒棒糖数量;第二行是一个整数m(1<=m<=10),表示明明考察过的店铺的数量;接下来m行,每行两个数,表示该店铺中棒棒糖的价格和数量,价格为一实数(最多两位小数),数量为一整数。

输出

输出一个实数,保留两位小数,表示最小费用。

样例输入 Copy

100
4
0.5 50
0.33 30
1 80
0.6 40

样例输出 Copy

46.90

思路:重点需要考虑的是如何处理需要购买的棒棒糖数量与店铺库存的关系,如果单纯的价格低,库存少,怎么办?考虑如何从价格最低的开始买,买完之后再买价格第二低的。
这样的话就需要先对价格关系排序,以便后边对买谁更便宜的处理。

#include<stdio.h>
struct bangbangtang
{
double price;
int shu;
}b[105],t;
int main()
{
int n,i,m,j,sum=0;
double min=0.0;
scanf("%d",&n);
scanf("%d",&m);
for(i=1;i<=m;i++)
{
scanf("%lf%d",&b[i].price,&b[i].shu);
}
for(i=1;i<=m;i++)
{
for(j=i+1;j<=m;j++)
{
if(b[j].price<b[i].price)
{
t=b[j];
b[j]=b[i];
b[i]=t;
}
}
}
for(i=1;i<=m;i++)
{
sum=sum+b[i].shu;
min=min+b[i].price*b[i].shu;
if(sum>n)
break;
}
min=min-(sum-n)*b[i].price;
printf("%.2f",min);
}

猜你喜欢

转载自blog.csdn.net/weixin_44373494/article/details/90213685