酷代码 AI
菜单
服务商

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]

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