刷题刷出新高度,偷偷领先!偷偷领先!偷偷领先! 关注我们,悄悄成为最优秀的自己!

简答题

编程实现:

某商店部分产品搞活动,每买两件商品只收取最高价格商品的费用,另一件商品不收取费用(相同价格只收取一件商品费用)。小明选购了N件(2≤N≤1000,N为偶数)商品,且已知每件商品的价格,他会每次结算两件商品。请帮助小明计算出N件商品最少花费多少钱。

例如:N = 6,6件商品价格分别为32、56、92、45、12、98,可结算3次,98和92的商品一起结算,56和45的商品一起结算,32和12的商品一起结算,共花费186(186=98+56+32)。

输入描述:

第一行输入一个正整数N(2≤N≤1000,N为偶数),表示小明购买了商品数

第二行输入N个正整数(1≤正整数≤100),表示每件商品的价格,正整数之间以一个英文逗号隔开

输出描述:

输出一个整数,表示小明购买N件商品最少需要花费的钱数


样例输入:

6
32,56,92,45,12,98

样例输出:

186

使用微信搜索喵呜刷题,轻松应对考试!

答案:

br />```pythondef min_cost(N, prices):prices.sort(reverse=True)cost = 0for i in range(0, N, 2):if i < N:cost += prices[i]if i + 1 < N:cost += prices[i + 1]return costN = int(input().strip())prices = list(map(int, input().strip().split(',')))print(min_cost(N, prices))```

解析:

【喵呜刷题小喵解析】

本题的解题关键是理解题意,并根据题意设计算法。

根据题目描述,每次结算两件商品,只收取最高价格商品的费用,另一件商品不收取费用。因此,我们可以将商品按照价格从高到低排序,然后每次取价格最高的两件商品进行结算,直到取完所有商品。

具体实现上,我们可以定义一个函数min_cost,接收两个参数N和prices,分别表示商品数量和商品价格列表。在函数内部,我们首先将商品价格列表按照从高到低排序,然后遍历商品列表,每次取价格最高的两件商品进行结算,并将结算结果累加到cost变量中。最后返回cost即可。

在主函数中,我们首先读入商品数量和商品价格列表,然后调用min_cost函数计算最少花费,并将结果输出。

具体实现代码如下:

```python
def min_cost(N, prices):
prices.sort(reverse=True)
cost = 0
for i in range(0, N, 2):
if i < N:
cost += prices[i]
if i + 1 < N:
cost += prices[i + 1]
return cost

N = int(input().strip())
prices = list(map(int, input().strip().split(',')))
print(min_cost(N, prices))
```

在算法的时间复杂度方面,我们首先将商品价格列表按照从高到低排序,排序的时间复杂度为O(NlogN)。然后遍历商品列表,每次取价格最高的两件商品进行结算,时间复杂度为O(N)。因此,总的时间复杂度为O(NlogN)。
创作类型:
原创

本文链接:编程实现: 某商店部分产品搞活动,每买两件商品只收取最高价格商品的费用,另一件商品不收取费用(相同价

版权声明:本站点所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明文章出处。

让学习像火箭一样快速,微信扫码,获取考试解析、体验刷题服务,开启你的学习加速器!

分享考题
share