童童在跳蚤市场挑选了n件商品,他想把这些商品全部买回家。现在跳蚤市场正举办一个买一送一的活动。即买一件商品,就可以免费带走第二件商品,只要第二件商品的价格不超过购买的商品价格即可。 请你帮童童计算一下,他需要多少钱才能把所有商品带回家。 c++完整代码
时间: 2024-10-03 11:00:53 浏览: 31
在这个场景中,童童可以把每两件商品视为一组,因为可以免费得到第二件。但是,我们还需要注意,如果第一件商品的价格已经是最大值,那么第二件就不能再享受“买一送一”的优惠了。所以,我们需要遍历商品列表,对每两件商品计算总花费,并更新当前最小总花费。
以下是一个简单的C++代码实现:
```cpp
#include <iostream>
#include <vector>
int findTotalCost(std::vector<int>& prices) {
int totalCost = 0;
for (size_t i = 0; i < prices.size(); ++i) {
// 如果是第一个商品或者后续商品价格更低,则单独购买
if (i == 0 || prices[i] <= prices[i - 1]) {
totalCost += prices[i];
} else { // 否则,按照买一送一的方式处理
totalCost += prices[i - 1]; // 购买第一件商品
totalCost += std::min(prices[i], prices[i - 1]); // 送第二件商品,取较小的那个
}
}
return totalCost;
}
int main() {
int n;
std::cin >> n;
std::vector<int> prices(n);
for (int& price : prices) {
std::cin >> price;
}
std::cout << findTotalCost(prices) << std::endl;
return 0;
}
阅读全文