酷代码 AI
菜单
服务商

C++投票计数统计实现原理与开发注意要点

好的,这是一个非常经典的**计数统计**问题。虽然简单,但它是许多复杂统计算法的基石,掌握好它非常重要。 下面我将为你提供C++的解决方案,并给出详细的代码解释和开发建议。 ### 🧩 问题分析 1. **输入**:10个整数,范围在1到10之间,代表每位学生的投票选择。 2. **输出**:10个整数,按顺序代表编号1到10的学生各自获得的票数。 3. **核心逻辑**:统计每个数字(1-10)在输入中出现的次数。 ### 💻 C++ 代码实现 ```cpp #include <iostream> #include <vector> using namespace std; int main() { // 1. 定义计数器数组,长度为11(索引0不使用,索引1-10对应学生1-10) // 或者使用 vector<int> votes(11, 0); int votes[11] = {0}; int vote; // 用于临时存储每次输入的投票 // 2. 读取10个投票 // 注意:输入是一行,但cin可以自动处理空格分隔的整数 for (int i = 0; i < 10; ++i) { cin >> vote; // 3. 计数(可选:增加输入合法性校验) if (vote >= 1 && vote <= 10) { votes[vote]++; } } // 4. 输出结果(从索引1开始到10) for (int i = 1; i <= 10; ++i) { cout << votes[i]; if (i != 10) { // 最后一个数字后面不加空格 cout << " "; } } return 0; } ``` ### 📖 关键概念解释 * **数组 `votes[11]`**: * 我们创建了11个整型变量(索引0到10)。 * **索引**:`votes[i]` 中的 `i` 代表学生的编号。 * **值**:`votes[i]` 里存放的数字代表编号为 `i` 的学生获得的票数。 * **索引0**:我们刻意不使用,这样做是为了让 `votes[1]` 对应学生1,使代码逻辑更加直观,避免繁琐的 `i-1` 操作。 * **递增操作 `votes[vote]++`**: * 这是计数的核心。`vote` 是当前读入的数值(例如4),那么 `votes[4]++` 就表示“学生4的票数加1”。 * **合法性校验 `if (vote >= 1 && vote <= 10)`**: * 虽然题目保证输入合法,但添加这个判断是一个非常好的编程习惯。它可以防止因异常输入(如0或11)导致数组越界访问(`votes[11]` 或 `votes[0]`),从而引发程序崩溃或安全漏洞。 ### ⚙️ 标准输入输出 (I/O) 说明 * **`cin >> vote;`**:从标准输入读取一个整数。它自动忽略空格和换行符,所以“一行输入”对于`cin`来说和“多行输入”没有区别。 * **`cout << votes[i];`**:向标准输出打印一个整数。 * **输出格式**:题目要求“整数之间用空格隔开”。我们使用 `if (i != 10)` 来判断,确保最后一个数字后面没有多余的空格,符合输出格式的**最佳实践**。 ### 💡 开发建议与进阶 1. **使用 `std::vector`**:虽然用 `int votes[11]` 可以,但在更复杂的场景下,使用 `std::vector<int> votes(11, 0);` 是现代C++的推荐做法,它更安全、更灵活。 2. **代码可读性**: * 命名变量时,使用有意义的名称(如 `votes` 而非 `v`)。 * 添加必要的注释,解释关键逻辑。 3. **扩展场景**: * **统计票数排名**:如果需要输出前三名,你需要结合排序算法和结构体 `pair<int, int>`。 * **动态学生数量**:如果学生人数不是固定的10人,而是由输入的第一行给出,那么`vector`将变得非常方便。 * **寻找平局**:可以增加一次遍历,找到票数最大值,并记录所有达到该最大值的编号。 4. **常见陷阱**: * **数组越界**:忘记检查输入范围,直接使用 `votes[input]`,如果输入是11则会导致未定义行为。 * **初始化**:忘记初始化数组 `int votes[10] = {0};`,数组中的数值将是随机的,导致统计结果完全错误。 ######[AI写代码神器 | 1080点数解答 | 2026-05-23 20:36:25]

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