版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/li99yangg/article/details/80602002
题目描述
美团在吃喝玩乐等很多方面都给大家提供了便利。最近又增加了一项新业务:小象生鲜。这是新零售超市,你既可以在线下超市门店选购生鲜食品,也可以在手机App上下单,最快30分钟就配送到家。
新店开张免不了大优惠。我们要在小象生鲜超市里采购n个物品,每个物品价格为ai,有一些物品可以选择八折优惠(称为特价优惠)。
有m种满减优惠方式,满减优惠方式只有在所有物品都不选择特价优惠时才能使用,且最多只可以选择最多一款。
每种满减优惠描述为(b i,c i),即满b i减c i(当消费>=b i时优惠c i)。
求要买齐这n个物品(必须一单买齐),至少需要多少钱(保留两位小数)。
新店开张免不了大优惠。我们要在小象生鲜超市里采购n个物品,每个物品价格为ai,有一些物品可以选择八折优惠(称为特价优惠)。
有m种满减优惠方式,满减优惠方式只有在所有物品都不选择特价优惠时才能使用,且最多只可以选择最多一款。
每种满减优惠描述为(b i,c i),即满b i减c i(当消费>=b i时优惠c i)。
求要买齐这n个物品(必须一单买齐),至少需要多少钱(保留两位小数)。
输入描述:
第一行,两个整数n,m。
接下来n行,每行一个正整数ai,以及一个0/1表示是否可以选择特价优惠(1表示可以)。
接下来m行,每行两个正整数b
i,c
i,描述一款满减优惠。
1 <= n,m <=10
1 <= a
i <= 100 1 <= c
i < b
i <= 1000
输出描述:
一行一个实数,表示至少需要消耗的钱数(保留恰好两位小数)。
示例1
输入
2 1 6 1 10 1 12 2
输出
12.80
示例2
输入
2 2 6 1 10 1 5 1 16 6
输出
10.00
#include <stdio.h>
{
float money;
int flag;
}good;
typedef struct
{
float price;
float count;
}discount;
int main()
{
int n,m;
while(~scanf("%d",&n))
{
int good_num = n;
scanf("%d",&m);
discount d[10];
int discount_num = m;
good g[10];
for(int i = 0;i<good_num;i++)
{
scanf("%f",&(g[i].money));
scanf("%d",&(g[i].flag));
}
for(int i = 0;i<discount_num;i++)
{
scanf("%f",&(d[i].price));
scanf("%f",&(d[i].count));
}
float sum = 0;//不使用优惠的总价格
float sum_good1 = 0;//八折后物品的价格
float sum_good2 = 0;//使用满减后的价格
for(int i = 0;i<good_num;i++)
{
sum+=g[i].money;
//printf("%f\n",sum);
if(g[i].flag==1)sum_good1+=g[i].money*0.8;
else sum_good1+=g[i].money;
}
int real_count = 0;
for(int i = 0;i<discount_num;i++)
{
if(sum>=d[i].price)
{
if(d[i].count>real_count)real_count = d[i].count;
}
}
sum_good2 = sum - real_count;
float real_sum = sum;
if(real_sum>=sum_good1) real_sum=sum_good1;
if(real_sum>=sum_good2) real_sum=sum_good2;
printf("%.2f\n",real_sum);
}
return 0;
}