红旗小学选举问题:C++实现与解析
好的,我们先来一步步分析这个问题,并用 C++ 语言实现。 --- ## 🎯 问题分析 1. **输入**: - 第一行:学生总数 `n`。 - 第二行:`n` 个数字,每个数字是 `1`(投给明明)或 `2`(投给萱萱)。 2. **规则**: - 率先获取 **一半以上** 的选票就当选。 - 选票保证一定有人当选,所以不需要考虑平局或无人过半的情况。 - “一半以上” 意味着票数 > `n / 2`。 3. **输出**: - 一个数字:`1`(明明)或 `2`(萱萱)。 --- ## 💡 思路 - 我们只需要统计 `1` 和 `2` 的票数。 - 因为保证有人当选,所以只要判断 `1` 的票数是否超过 `n/2` 即可: - 如果 `count1 > n / 2`,输出 `1`。 - 否则输出 `2`(因为保证有人当选,所以此时一定是 `2` 的票数过半)。 --- ## 📝 C++ 代码实现 ```cpp #include <iostream> using namespace std; int main() { int n; cin >> n; int count1 = 0; for (int i = 0; i < n; i++) { int vote; cin >> vote; if (vote == 1) { count1++; } } // 判断明明是否获得超过一半的票 if (count1 > n / 2) { cout << 1 << endl; } else { cout << 2 << endl; } return 0; } ``` --- ## 🔍 代码解释 1. **变量说明**: - `n`:学生总数。 - `count1`:统计明明(1)的票数。 2. **输入处理**: - 先读 `n`。 - 循环 `n` 次读入每个投票,若为 `1` 则 `count1++`。 3. **判断获胜者**: - `n / 2` 在 C++ 中是整数除法,例如 `n=5` 时 `n/2=2`。 - 要超过一半,必须 `count1 > n/2`。 - 因为题目保证有人当选,所以若 `count1` 不过半,则一定是 `2` 过半。 --- ## ⚠️ 注意事项与边界情况 1. **整数除法**: - 当 `n` 为奇数时,例如 `n=5`,一半是 `2.5`,但 `n/2` 得到 `2`,因此 `count1` 需要至少 `3` 才过半,条件 `count1 > n/2` 是正确的。 - 当 `n` 为偶数时,例如 `n=4`,一半是 `2`,需要 `count1 > 2` 即至少 `3` 票才过半,条件同样正确。 2. **保证有人当选**: - 如果题目没有这个保证,我们还需要判断 `2` 的票数是否过半,或者是否平局。但本题简化了逻辑。 3. **输入格式**: - 第二行是 `n` 个数字空格分隔,用 `cin >> vote` 在循环中读取即可自动处理空格。 --- ## 🚀 性能与扩展建议 - **时间复杂度**:O(n),只需遍历一次选票。 - **空间复杂度**:O(1),只用了几个整型变量。 - **扩展**: - 如果候选人编号不固定(比如 1~k),可以用数组或 `map` 统计票数,再找最大值是否过半。 - 如果票数相同且都不过半,可能需要进一步规则(如加赛),但本题不需要。 --- ## 📚 相关练习 - **LeetCode 169. 多数元素**:寻找出现次数超过 `n/2` 的元素,可用摩尔投票法。 - **选举问题变种**:多个候选人、需要排序、加权投票等。 --- ######[AI写代码神器 | 954点数解答 | 2026-03-22 14:54:09]
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)343
- Golang开发:解析JSON数据时数值默认类型及示例解析(百度文心 | 393点数解答 | 2023-11-09 18:13:06)276
- SQL Working Areas Sizing: Manual vs. Automatic Policy - A Comprehensive Analysis(阿里通义 | 530点数解答 | 2024-05-13 10:55:58)307
- 51 单片机:定时器 0 实现 8 个 LED 循环点亮,附代码及优化建议(字节豆包 | 1193点数解答 | 2024-12-27 15:10:29)311
- GIS软件操作:计算小学所属学区及各学区小学数量全攻略 (百度文心 | 767点数解答 | 2024-06-30 05:27:42)182
- 用 Python 处理学区与小学图层:计算小学所属学区并统计各学区小学数量(GPT | 642点数解答 | 2024-06-30 05:27:56)181
- 小学记叙文:探秘成都宽窄巷子,一场美食与文化的奇妙之旅! (字节豆包 | 310点数解答 | 2024-12-22 20:28:18)213
- 宽窄巷子:成都的宝藏之旅 (字节豆包 | 387点数解答 | 2024-12-22 20:29:00)206
- 温暖港湾:我与爸妈的亲情纪事(字节豆包 | 317点数解答 | 2024-12-22 20:31:11)206
- 清晨树下,邂逅可爱小鸟宝宝的奇妙之旅(字节豆包 | 284点数解答 | 2024-12-22 20:32:52)173
- 与神笔马良同行:一日善举,满是希望 (字节豆包 | 283点数解答 | 2024-12-22 20:34:00)236
- 与神笔马良一日游:用爱书写奇妙助人大冒险! (字节豆包 | 407点数解答 | 2024-12-22 20:36:11)166