酷代码 AI
菜单
服务商

题目描述 石头剪刀布是常见的猜拳游戏:石头胜剪刀,剪刀胜布,布胜石头。如果两个人出拳 一样,则不分胜负。在《生活大爆炸》第二季第 8 集中出现了一种石头剪刀布的升级 版游戏。 升级版游戏在传统的石头剪刀布游戏的基础上,增加了两个新手势: 斯波克:《星际迷航》主角之一。 蜥蜴人:《星际迷航》中的反面角色。 这五种手势的胜负关系如表一所示,表中列出的是甲对乙的游戏结果。 现在,小 A 和小 B 尝试玩这种升级版的猜拳游戏。已知他们的出拳都是有周期性规 律的,但周期长度不一定相等。例如:如果小 A 以 石头-布-石头-剪刀-蜥蜴人-斯波 克 长度为 6 的周期出拳,那么他的出拳序列就是 石头-布-石头-剪刀-蜥蜴人-斯波克 -石头-布-石头-剪刀-蜥蜴人-斯波克-...,而如果小 B 以 剪刀-石头-布-斯波克-蜥 蜴人 长度为 5 的周期出拳,那么他出拳的序列就是 剪刀-石头-布-斯波克-蜥蜴人-剪 刀-石头-布-斯波克-蜥蜴人-...。 已知小 A 和小 B 一共进行 N 次猜拳。每一次赢的人得 1 分,输的得 0 分;平局两 人都得 0 分。现请你统计 N 次猜拳结束

```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出拳的规律。 [2025-11-26 18:54:37 | AI问答 | 656点数解答]

相关提问
发财导航,免费问AI
实用工具查看更多