酷代码 AI
菜单
服务商

C++ 投票统计:固定范围计数法实现及开发注意要点

好的,我们来一起解决这个问题。 ## 💡 问题理解 我们有 **10 位学生**,他们的编号是 1 到 10。每个学生只能投一票,投票对象可以是 1 到 10 中的任意编号。 输入是这 10 票的具体投票对象,我们需要统计出 **得票数最高** 的那个学生的得票数。 **注意**: - 不是投票学生的编号,而是被投票学生的编号。 - 需要统计的是“得票数最高的学生”的得票数,而不是学生的编号。 --- ## 🚀 解决方案 ### 🔹 方法一:固定数组计数法(推荐,适合初学者) 因为编号范围固定(1 到 10),可以使用一个长度为 11 的数组(下标从 1 开始使用)来统计每个编号的得票数。 然后遍历数组找出最大值。 **步骤**: 1. 创建一个大小为 11 的整型数组 `votes`,初始化为 0。 2. 循环读取 10 个整数 `v`,执行 `votes[v]++`。 3. 遍历 `votes[1]` 到 `votes[10]`,找出最大值。 4. 输出最大值。 **代码实现(C++)**: ```cpp #include <iostream> #include <algorithm> using namespace std; int main() { int votes[11] = {0}; // 下标1-10有效 int v; // 读取10个投票 for (int i = 0; i < 10; ++i) { cin >> v; votes[v]++; } // 找最大得票数 int max_votes = 0; for (int i = 1; i <= 10; ++i) { if (votes[i] > max_votes) { max_votes = votes[i]; } } cout << max_votes << endl; return 0; } ``` --- ### 🔹 方法二:使用 map 统计(更通用,适合编号范围不确定的场景) 如果编号范围不确定,可以使用 `unordered_map` 或 `map` 来统计。 **代码实现(C++)**: ```cpp #include <iostream> #include <unordered_map> #include <algorithm> using namespace std; int main() { unordered_map<int, int> votes; int v; for (int i = 0; i < 10; ++i) { cin >> v; votes[v]++; } int max_votes = 0; for (auto& p : votes) { if (p.second > max_votes) { max_votes = p.second; } } cout << max_votes << endl; return 0; } ``` --- ## 🔍 关键概念解释 | 概念 | 说明 | |------|------| | `数组` | 固定大小的连续内存区域,适合已知范围的数据统计 | | `votes[v]++` | 以学生的编号作为数组下标,直接累加得票数 | | `unordered_map` | C++ 标准库中的哈希表,适合未知范围的键值统计 | | `遍历找最大值` | 时间复杂度 O(n),是找最大元素的常用方法 | --- ## ⚠️ 常见陷阱与注意事项 1. **数组越界**:如果输入中存在编号为 0 或大于 10 的值,数组方法会越界。但本题保证在 1-10 范围内。 2. **初始化**:必须确保计数数组初始化为 0,否则结果错误。 3. **循环次数**:题目说“10 位学生”,因此循环 10 次,不要多读或少读。 --- ## 🧠 进阶思考 - **如果学生人数可变**:可以使用 `vector` 动态分配数组大小,或使用 `map`。 - **如果要求输出得票最高的学生编号**:在找最大值的同时记录对应的索引。 - **平票情况**:题目只要求输出得票数,不要求输出具体是哪位学生,因此无需处理平票。 --- ## 📚 学习资源推荐 - [C++ 数组官方文档](https://en.cppreference.com/w/cpp/language/array) - [unordered_map 官方文档](https://en.cppreference.com/w/cpp/container/unordered_map) - [C++ 标准库算法 max_element](https://en.cppreference.com/w/cpp/algorithm/max_element) --- ## 🔧 开发建议 - **多测试边界**:如所有票投给同一个人、每人投自己等。 - **注意输入输出格式**:cin/cout 足够快,本题不需要使用 scanf/printf。 - **养成良好的变量命名习惯**:`votes` 比 `v` 更易读,但简单题目中使用短变量也问题不大。 --- ######[AI写代码神器 | 1067点数解答 | 2026-05-23 21:09:41]

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