酷代码 AI
菜单
服务商
DeepSeek字节豆包
更多选项

石头剪刀布胜负判断的C++实现与规则解析

## 🎮 石头剪刀布胜负判断 ### 📝 问题分析 给定两个长度相等的字符串,分别代表A和B的出拳序列,需要统计A赢的次数。 **规则**: - **S**(石头)> **J**(剪刀) - **J**(剪刀)> **B**(布) - **B**(布)> **S**(石头) ### 💻 C++ 实现 ```cpp #include <iostream> #include <string> using namespace std; // 判断A是否赢B,返回true表示A赢 bool isWin(char a, char b) { return (a == 'S' && b == 'J') || (a == 'J' && b == 'B') || (a == 'B' && b == 'S'); } int main() { string a, b; // 读取两个字符串 cin >> a >> b; int wins = 0; // 遍历每个位置 for (size_t i = 0; i < a.length(); i++) { if (isWin(a[i], b[i])) { wins++; } } cout << wins << endl; return 0; } ``` ### 🔍 关键点解析 | 函数/部分 | 说明 | |-----------|------| | `isWin(a, b)` | 根据胜负关系返回A是否胜利 | | `a.length()` | 获取字符串长度,保证两字符串等长 | ### ⚙️ 编译运行 ```bash g++ -std=c++11 rock_paper_scissors.cpp -o rps ./rps ``` ### 📌 输入输出验证 **输入样例**: ``` SJSS BJSB ``` **程序推理过程**: 1. 位置0:A出S,B出B → B赢 2. 位置1:A出J,B出J → 平局 3. 位置2:A出S,B出S → 平局 4. 位置3:A出S,B出B → B赢 **输出**:`0` ✅ ### 🧠 扩展建议 - **健壮性**:若输入字符串长度不同,应增加长度检查,避免越界访问。 - **性能**:O(n) 线性时间复杂度,无需额外优化。 - **代码规范**:可改用 `size_t` 避免符号比较,或使用 C++11 的 `auto` 提升可读性。 - **单元测试**:建议添加测试用例覆盖所有胜负组合(如 `SJ`, `JB`, `BS`, 以及平局 `SS`, `JJ`, `BB`)。 ### 📚 学习资源 - **C++ 官方文档**:[cppreference.com](https://en.cppreference.com/w/) - **在线调试工具**:[OnlineGDB](https://www.onlinegdb.com/online_c++_compiler) --- ######[AI写代码神器 | 664点数解答 | 2026-07-31 19:25:02]

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