酷代码 AI
菜单
服务商

C++数组计数实现:冰鸟颜色编号统计

好的,我们来一步步分析并解决这个问题。这是一个非常经典的**计数统计**问题,非常适合用来练习数组作为计数器的用法。 --- ## 🎯 问题分析 题目要求: - 输入:10个整数,范围是 **1 到 10**。 - 输出:10个整数,分别代表 **颜色编号 1 到 10** 各自出现的次数,用空格隔开。 **核心思路:** 使用一个长度为 10 的数组(索引 0 到 9)来存储颜色编号 `1` 到 `10` 的出现次数。 **关键对应关系:** - 颜色编号 `i` 的计数存放在数组的 `i-1` 位置。 --- ## 💻 代码实现(C++) ```cpp #include <iostream> using namespace std; int main() { // 1️⃣ 初始化计数器数组,全部为0 int count[10] = {0}; int color; // 2️⃣ 读取10个颜色编号 for (int i = 0; i < 10; i++) { cin >> color; // 读取一个编号 count[color - 1]++; // 编号1对应索引0,编号2对应索引1,以此类推 } // 3️⃣ 输出结果:编号1到10的数量 for (int i = 0; i < 10; i++) { cout << count[i]; // 输出编号i+1的个数 if (i < 9) { cout << " "; // 除了最后一个,后面都加空格 } } cout << endl; return 0; } ``` --- ## 📌 关键点解释 | 代码部分 | 说明 | |---------|------| | `int count[10] = {0};` | 定义数组并初始化为0,用于存放1~10号颜色的计数 | | `count[color - 1]++;` | **重要映射**:编号1存到索引0,编号2存到索引1,...,编号10存到索引9 | | 输出循环 | 遍历数组,依次输出每个颜色的个数,用空格分隔 | --- ## ✅ 示例验证 **样例1:** ``` 输入: 3 1 4 1 5 9 2 6 5 3 输出: 2 1 2 1 2 1 0 0 1 0 ``` - 编号1出现2次 → count[0]=2 - 编号2出现1次 → count[1]=1 - 编号3出现2次 → count[2]=2 - 依次类推... **样例2:** ``` 输入: 10 9 8 8 4 4 10 3 2 5 输出: 0 1 1 2 1 0 0 2 1 2 ``` --- ## ⚙️ 性能分析 - **时间复杂度**:O(N),N=10(两次循环,常数级) - **空间复杂度**:O(1),仅使用了固定大小的数组(10个int) 满足题目要求的 1000MS/100MB 完全没问题。 --- ## 🧠 进阶思考与建议 1. **数组边界检查**:虽然题目保证编号 ≤10,但实际开发中建议加入合法性判断,防止越界。 2. **扩展场景**:如果编号范围更大(如1~1000),依然可以用相同思路,只需调整数组大小即可。 3. **使用Map结构**:如果编号范围未知或稀疏,可以考虑使用 `unordered_map` 动态计数。 4. **输出格式**:注意最后一个数字后面不要多余空格,避免格式错误。 --- ## 📚 学习资源推荐 - **C++官方文档**:[cppreference.com](https://en.cppreference.com/w/) - **相关概念**:数组、循环、输入输出流(cin/cout) - **类似题目练习**:LeetCode 上搜索“计数”类题目,如“找出出现次数最多的元素” --- ######[AI写代码神器 | 903点数解答 | 2026-05-16 21:10:25]

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