C++ 统计整数出现次数并输出的代码分析与优化
### 代码功能分析 📋 这段 C++ 代码的主要功能是读取用户输入的整数 `n`,接着读取 `n` 个整数,然后统计每个整数(范围在 0 到 100 之间)出现的次数,最后按从小到大的顺序输出所有出现过的整数,整数之间用空格分隔。 ### 代码解释 📚 1. **头文件和命名空间**: ```cpp #include <iostream> using namespace std; ``` - `#include <iostream>`:包含输入输出流库,用于进行输入输出操作。 - `using namespace std;`:使用标准命名空间,这样就可以直接使用 `cout` 和 `cin` 等标准库中的对象,而无需加上 `std::` 前缀。 2. **主函数**: ```cpp int main() { int n; cin >> n; ``` - `int n;`:定义一个整数变量 `n`,用于存储输入的整数个数。 - `cin >> n;`:从标准输入读取一个整数,并将其赋值给 `n`。 3. **计数数组**: ```cpp int count[101] = {0}; ``` - 定义一个长度为 101 的整数数组 `count`,并初始化为 0。该数组用于记录 0 到 100 每个数字出现的次数。 4. **读取输入并统计次数**: ```cpp for (int i = 0; i < n; i++) { int num; cin >> num; count[num]++; } ``` - 使用 `for` 循环读取 `n` 个整数,每次读取一个整数 `num`,并将 `count[num]` 的值加 1,表示该数字出现的次数增加 1。 5. **输出出现过的数字**: ```cpp bool first = true; for (int i = 0; i <= 100; i++) { if (count[i] > 0) { if (!first) { cout << " "; } cout << i; first = false; } } ``` - `bool first = true;`:用于标记是否是第一个输出的数字。 - 使用 `for` 循环遍历计数数组 `count`,如果 `count[i]` 大于 0,表示数字 `i` 出现过,就输出该数字。 - 如果不是第一个输出的数字,先输出一个空格,然后再输出数字。 - 输出数字后,将 `first` 标记为 `false`。 6. **换行并返回**: ```cpp cout << endl; return 0; ``` - `cout << endl;`:输出一个换行符。 - `return 0;`:表示程序正常结束。 ### 进阶使用指南 💡 1. **性能优化**: - 如果输入的数字范围较大,使用固定大小的数组可能会浪费大量内存。可以考虑使用 `std::unordered_map` 来存储数字及其出现的次数,这样可以动态分配内存。 ```cpp #include <iostream> #include <unordered_map> #include <vector> #include <algorithm> int main() { int n; std::cin >> n; std::unordered_map<int, int> count; for (int i = 0; i < n; i++) { int num; std::cin >> num; count[num]++; } std::vector<int> uniqueNums; for (const auto& pair : count) { uniqueNums.push_back(pair.first); } std::sort(uniqueNums.begin(), uniqueNums.end()); bool first = true; for (int num : uniqueNums) { if (!first) { std::cout << " "; } std::cout << num; first = false; } std::cout << std::endl; return 0; } ``` 2. **错误处理**: - 当输入的数字不在 0 到 100 范围内时,当前代码会导致数组越界。可以添加输入验证,确保输入的数字在合法范围内。 ```cpp for (int i = 0; i < n; i++) { int num; cin >> num; if (num >= 0 && num <= 100) { count[num]++; } else { cout << "Invalid input: number out of range." << endl; return 1; } } ``` 3. **扩展功能**: - 可以添加功能,输出每个数字出现的次数。 ```cpp for (int i = 0; i <= 100; i++) { if (count[i] > 0) { cout << i << " appears " << count[i] << " times." << endl; } } ``` ### 开发建议 💻 1. **注释**:在代码中添加详细的注释,提高代码的可读性,方便后续维护。 2. **输入验证**:对用户输入进行验证,确保输入的合法性,避免程序出现异常。 3. **模块化**:将不同的功能封装成函数,提高代码的可维护性和复用性。 ### 相关技术栈推荐、学习资源和典型应用场景 - **技术栈推荐**:C++ 标准库中的 `std::unordered_map`、`std::vector` 和 `std::sort` 等容器和算法。 - **学习资源**: - C++ 官方文档:https://en.cppreference.com/w/ - 《C++ Primer》:一本经典的 C++ 学习书籍。 - **典型应用场景**:统计数据集中不同元素的出现次数,如统计学生成绩的分布情况。 ######[AI写代码神器 | 1433点数解答 | 2026-03-27 19:37:48]
- 判断超级幸运数:满足“纯4/7数位”或“4/7总个数为4或7”的整数计数(阿里通义 | 965点数解答 | 2026-03-13 12:15:06)22
- 培训机构学员成绩与年龄更新:C++ 代码实现(DeepSeek | 186点数解答 | 2025-12-16 18:04:31)62
- Python 处理培训机构学员培训后年龄与 NOIP 成绩提升情况(DeepSeek | 73点数解答 | 2025-12-16 18:05:20)68
- 培训机构学员成绩提升:C++代码实现年龄与NOIP成绩更新(DeepSeek | 178点数解答 | 2025-12-31 12:20:24)62
- 求解特定条件下整数序列的最小值:算法分析与代码实现(字节豆包 | 746点数解答 | 2026-01-24 13:14:40)57
- C 语言:按特定顺序读入并输出浮点数、整数和字符(字节豆包 | 106点数解答 | 2024-09-26 00:32:40)313
- C语言:按序读入浮点数、整数、字符并按新顺序输出,附代码实现 (字节豆包 | 108点数解答 | 2024-09-30 22:54:08)330
- C语言:按特定顺序读入并输出浮点数、整数和字符,精确控制小数位(字节豆包 | 155点数解答 | 2024-10-08 22:06:18)323
- C++与Python:按特定顺序输入输出数据并保留浮点数两位小数的实现(字节豆包 | 168点数解答 | 2024-10-08 22:07:03)330
- C语言:按特定顺序读入再输出,含浮点数精确格式处理(字节豆包 | 105点数解答 | 2024-10-08 22:07:29)340
- C++ 混合类型数据格式化输入输出:按指定顺序输出并保留两位小数(字节豆包 | 187点数解答 | 2024-10-16 14:31:08)385
- C语言:实现混合类型数据格式化输入输出,代码超简单!(字节豆包 | 159点数解答 | 2024-10-16 14:32:18)379