生活大爆炸升级版猜拳游戏:代码实现、解释与复杂度分析
```cpp #include <iostream> using namespace std; // 判断胜负关系的函数 int judge(int a, int b) { if (a == b) return 0; if ((a == 0 && (b == 2 || b == 3)) || (a == 1 && (b == 0 || b == 3)) || (a == 2 && (b == 1 || b == 4)) || (a == 3 && (b == 2 || b == 4)) || (a == 4 && (b == 0 || b == 1))) { return 1; } return -1; } int main() { int N, NA, NB; cin >> N >> NA >> NB; int A[205], B[205]; for (int i = 0; i < NA; i++) { cin >> A[i]; } for (int i = 0; i < NB; i++) { cin >> B[i]; } int scoreA = 0, scoreB = 0; for (int i = 0; i < N; i++) { int result = judge(A[i % NA], B[i % NB]); if (result == 1) { scoreA++; } else if (result == -1) { scoreB++; } } cout << scoreA << " " << scoreB << endl; return 0; } ``` 代码解释 1. `judge`函数:该函数用于判断两个出拳结果的胜负关系。它接收两个整数`a`和`b`,分别代表小A和小B的出拳。如果`a`和`b`相等,则返回0表示平局;如果`a`赢`b`,则返回1;如果`a`输`b`,则返回 -1。 2. 主函数部分: - 首先读取三个整数`N`、`NA`和`NB`,分别表示猜拳次数、小A出拳的周期长度和小B出拳的周期长度。 - 接着读取小A和小B出拳的规律,分别存储在数组`A`和`B`中。 - 然后进行`N`次猜拳,每次根据当前的出拳结果调用`judge`函数判断胜负,并更新小A和小B的得分。 - 最后输出小A和小B的得分。 复杂度分析 - 时间复杂度:$O(N)$,因为只需要进行`N`次猜拳,每次猜拳的判断时间是常数级的。 - 空间复杂度:$O(NA + NB)$,主要用于存储小A和小B出拳的规律。 ######[AI问答 | 656点数解答 | 2025-11-26 18:54:37]
- 超燃年会来袭!诗舞歌戏轮番上阵,共赴欢乐盛宴! (字节豆包 | 206点数解答 | 2025-01-08 10:59:43)343
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)343
- C++求解序列或与运算和差值:避O(nq)复杂度及数据处理要点(字节豆包 | 534点数解答 | 2025-10-17 20:05:07)60
- 探寻数组中最长摆动子序列长度:思路剖析与代码优化(GPT | 758点数解答 | 2024-12-23 23:18:29)264
- 独家剖析:求解数组最长摆动子序列长度的代码实现与改进建议(GPT | 350点数解答 | 2024-12-23 23:20:54)261
- 求解 1 至 n 内第 k 大孤独数:质数与余数的巧妙探寻(字节豆包 | 298点数解答 | 2025-11-10 20:01:57)152
- 巧判小朋友同桌意愿:满足需求还是无解难题?(字节豆包 | 599点数解答 | 2025-11-16 20:06:12)67
- 巧用代码判断:能否让 2n 个小朋友都拥有满意同桌?(字节豆包 | 445点数解答 | 2025-11-16 20:07:02)78
- 51 单片机:定时器 0 实现 8 个 LED 循环点亮,附代码及优化建议(字节豆包 | 1193点数解答 | 2024-12-27 15:10:29)310
- 程序员一年自我提升秘籍:工作、学习、生活全方位进阶( | 486点数解答 | 2024-01-02 22:15:17)383
- 部队党员思想汇报:剖析工作生活学习,明确不足与前行方向(字节豆包 | 971点数解答 | 2025-09-05 19:51:16)107
- 用 JS 中 for 循环实现 1 到 100 相加并输出结果到页面的完整代码 ( | 240点数解答 | 2024-05-20 22:11:29)457