酷代码 AI
菜单
服务商
DeepSeek字节豆包
更多选项

C++实现找出前5个最大不重复数并降序输出

好的,我们来分析这个问题。这是一个典型的**排序 + 去重 + 截取前5个最大数**的问题。我会给出C++的实现,并附上详细的注释和步骤说明。 --- ## 🧠 问题解析 - 输入:一个整数 n 和 n 个整数(题目说“不同整数”,但为了通用性,我们还是做去重处理)。 - 处理: 1. 将数组从大到小排序。 2. 去重(但由于输入可能已不同,我们仍然保留去重逻辑,防止有重复数据)。 3. 输出前5个(如果不足5个,则全部输出)。 - 输出格式:数字之间用空格隔开。 --- ## 💻 C++ 实现 ```cpp #include <iostream> #include <vector> #include <algorithm> using namespace std; int main() { int n; cin >> n; vector<int> nums(n); for (int i = 0; i < n; ++i) { cin >> nums[i]; } // 1. 从大到小排序 sort(nums.begin(), nums.end(), greater<int>()); // 2. 去重并输出前5个 int cnt = 0; // 已输出去重后的个数 int prev = -1; // 记录上一个输出的数,用于去重判断 for (int i = 0; i < n; ++i) { if (cnt >= 5) break; // 已输出5个 if (i == 0 || nums[i] != prev) { // 第一个数或与前一个不同 if (cnt > 0) cout << " "; // 不是第一个输出,前面加空格 cout << nums[i]; prev = nums[i]; cnt++; } } cout << endl; return 0; } ``` --- ## 🧪 样例验证 **输入:** ``` 8 3 1 2 0 9 7 6 8 ``` **排序后:** `9 8 7 6 3 2 1 0` **去重输出前5个:** `9 8 7 6 3` 输出结果符合题目要求。 --- ## 📌 开发建议 - **使用 `vector<int>` 便于动态存储**,比数组更安全。 - **`greater<int>()` 用来降序排序**,注意需要 `#include <functional>`,但在 `algorithm` 中通常可用。 - **去重逻辑**:由于题目可能输入重复数据,使用 `prev` 变量来跳过重复项,避免使用额外的 `set`,节省内存。 - **注意边界条件**:如果 `n < 5`,循环会在 `cnt` 达到 `n` 后自然退出,输出全部不重复的数。 - **输出格式**:在输出第一个数之前不要加空格,用 `cnt > 0` 判断。 --- ## ⚠️ 常见错误提示 1. 忘记包含 `<algorithm>` 导致 `sort` 未定义。 2. 在排序时忘记使用 `greater<int>()`,默认是升序。 3. 对重复数处理不当,可能出现输出超过5个的情况。 4. 在输出空格时,容易出现多空格或少空格的问题,推荐使用上述 `if (cnt > 0) cout << " ";` 方式。 --- ######[AI写代码神器 | 765点数解答 | 2026-08-28 19:05:53]

相关提问
本站限时免费提问中
实用工具查看更多
Linux在线手册 [开发类]
Jquery在线手册 [开发类]
今日油价 [生活类]
图片互转base64 [开发类]
时间转换器 [开发类]