酷代码 AI
菜单
服务商

买二送一 内存限制: 256 Mb时间限制: 1000 ms 题目描述 我们需要买 n n 本书,第 i i 本书的价格为 a i a i ​ 。 现有买二送一的促销活动:凡购买两本书,可以免费带走第三本书,但免费书的价格不能超过两本付费书中任意一本的价格即可。 请问,买下全部的书最少需要多少钱? 输入格式 第一行:单个整数表示 n n; 第二行: n n 个整数表示 a 1 , a 2 , … , a n a 1 ​ ,a 2 ​ ,…,a n ​ 。 输出格式 单个整数:表示将所有书买下的最少钱数。 数据范围 对于 40 % 40% 的分数, 1 ≤ n ≤ 100 1≤n≤100; 对于 70 % 70% 的分数, 1 ≤ n ≤ 5000 1≤n≤5000; 对于 100 % 100% 的分数, 1 ≤ n ≤ 100 , 000 1≤n≤100,000, 1 ≤ a i ≤ 30 , 000 1≤a i ​ ≤30,000。 样例数据 输入: 6 1 3 2 4 5 6 输出: 16 说明: 买2与3,送1; 买5与6,送4。 语言

```cpp #include <iostream> #include <algorithm> #include <vector> using namespace std; int main() { int n; // 读取书的数量 cin >> n; vector<int> prices(n); for (int i = 0; i < n; i++) { // 读取每本书的价格 cin >> prices[i]; } // 对书的价格进行降序排序 sort(prices.begin(), prices.end(), greater<int>()); int totalCost = 0; for (int i = 0; i < n; i++) { // 如果索引不是3的倍数,说明这本书需要付费 if ((i + 1) % 3 != 0) { totalCost += prices[i]; } } // 输出买下全部书的最少花费 cout << totalCost << endl; return 0; } ``` 我在以往的开发过程中,碰到过以下几点需要格外小心处理的地方: 1. 排序时要注意是降序排序,这样才能保证每次买二送一得到最大的优惠。 2. 计算索引时要注意索引是从0开始的,判断是否为3的倍数时要进行合适的处理。 3. 输入输出的格式要严格按照题目要求,避免因为格式问题导致结果错误。 [2025-08-14 15:09:51 | AI写代码神器 | 315点数解答]

相关提问
请收藏新域名:pdcd.cn
发财导航,免费问AI
实用工具查看更多
今日油价 [生活类]
图片互转base64 [开发类]
时间转换器 [开发类]
数独游戏 [娱乐类]
经典推箱子 [娱乐类]
AI摸鱼五子棋 [娱乐类]