酷代码 AI
菜单
服务商

C++实现石头剪刀布胜负计数器

好的,这是一个非常清晰的编程问题。我们来一步步地用 C++ 实现它。 ### 🛠 准备工作 这个程序不需要任何外部库或特殊的环境配置。只需要一个支持 C++11 或更新标准的编译器(如 GCC、Clang、MSVC)即可。 ### 📝 核心思路 1. **读取输入**:从标准输入(通常是键盘)读取两个字符串,分别代表玩家 A 和玩家 B 的出拳序列。 2. **比较出拳**:遍历两个字符串的每个对应字符。对于每一轮,根据石头剪刀布的规则判断 A 是否获胜。 3. **规则定义**: - 石头 (`S`) 胜 剪刀 (`J`) - 剪刀 (`J`) 胜 布 (`B`) - 布 (`B`) 胜 石头 (`S`) - 其他情况(平局或A输)不计入A的获胜次数。 4. **输出结果**:输出 A 获胜的总轮数。 ### 💻 C++ 代码实现 ```cpp #include <iostream> #include <string> using namespace std; // 判断玩家A是否赢了当前这一轮 bool isWin(char a, char b) { // 规则映射:S 胜 J, J 胜 B, B 胜 S if (a == 'S' && b == 'J') return true; if (a == 'J' && b == 'B') return true; if (a == 'B' && b == 'S') return true; return false; } int main() { string aShots, bShots; // 读取两行字符串 cin >> aShots; cin >> bShots; // 确保长度相等(题目已保证) int n = aShots.length(); int winCount = 0; // 逐轮比较 for (int i = 0; i < n; ++i) { if (isWin(aShots[i], bShots[i])) { winCount++; } } // 输出结果 cout << winCount << endl; return 0; } ``` ### 📖 代码解析 | 部分 | 说明 | | :--- | :--- | | `#include <iostream>` 和 `#include <string>` | 引入标准输入输出流和字符串库。 | | `using namespace std;` | 使用标准命名空间,方便调用 `string`、`cin`、`cout` 等。 | | `bool isWin(char a, char b)` | 一个辅助函数,用于判断玩家A的出拳 `a` 是否赢了玩家B的出拳 `b`。函数内部用三个 `if` 语句覆盖了所有A获胜的场景。 | | `string aShots, bShots;` | 定义两个字符串变量,分别存储A和B的出拳序列。 | | `cin >> aShots; cin >> bShots;` | 使用 `cin` 从标准输入读取两行字符串。注意:`cin` 读取字符串时会以空格、换行等空白字符作为分隔符,这里由于每行只有一个字符串,所以读取效果正确。** *重要提示:** 如果字符串内部可能包含空格(本题不会),则需使用 `getline`。 | | `int n = aShots.length();` | 获取字符串长度,作为循环次数。 | | `for (int i = 0; i < n; ++i)` | 遍历字符串的每一个字符(即每一轮比赛)。 | | `if (isWin(aShots[i], bShots[i]))` | 调用 `isWin` 函数,判断当前轮次A是否获胜。 | | `winCount++;` | 如果A获胜,计数器加1。 | | `cout << winCount << endl;` | 输出最终的获胜次数。 | | `return 0;` | 程序正常结束。 | ### 🏆 示例运行 **输入:** ``` SJBS JBJS ``` **过程:** - 第1轮:A出S,B出J → A赢 - 第2轮:A出J,B出B → A赢 - 第3轮:A出B,B出J → 平局?不对,规则:B 包住 S,S 砸碎 J,J 剪 B。所以 B vs J 是J赢,B输。* 勘误:J 胜 B,所以 B 输,A输 (A出B,B出J) - 第4轮:A出S,B出S → 平局 **输出:** ``` 2 ``` ### 💡 开发建议 1. **输入验证**:虽然题目保证输入正确,但在实际开发中,建议添加检查两个字符串长度是否相等的逻辑,如果不相等应给出提示或处理异常。 2. **代码可读性**:使用 `isWin` 这样的辅助函数将判断逻辑与主循环分离,让代码意图更清晰,也便于后续修改规则(例如增加“蜥蜴”和“史波克”)。 3. **错误处理**:如果用户输入了不合法的字符(如 `'X'`),当前的 `isWin` 函数会返回 `false`(即认为A没赢)。根据需求,你可能需要添加非法输入的提示或处理。 4. **性能**:对于这种字符串长度有限的题目,无需担心性能。但如果字符串极长,可以考虑使用并行计算(如 `std::transform_reduce`)来优化,但通常没有必要。 ######[AI写代码神器 | 1233点数解答 | 2026-05-23 14:45:05]

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