C++开发NIM减法游戏 实现电脑1-7取值的问题咨询
NIM减法游戏代码修改方案
问题根因定位
你之前的代码存在两个核心问题:
- 电脑的取值范围被硬限制在1~2区间
- 未初始化随机数种子,导致逻辑修改后每次生成的数值固定为1
修改方案
1. 基础版(电脑在1~7合法区间随机取值)
直接替换原有电脑回合的逻辑即可,核心代码如下:
#include <iostream> #include <cstdlib> #include <ctime> #include <algorithm> // 用于min函数 using namespace std; int main() { // 全局仅需执行一次随机数种子初始化 srand((unsigned int)time(nullptr)); int total = 10; // 初始总数可自定义 int user_input; while (total > 0) { // 用户回合 cout << "当前剩余总数:" << total << "\n请输入1~7之间的整数:"; cin >> user_input; // 输入合法性校验 while (user_input < 1 || user_input > 7 || user_input > total) { cout << "输入非法,请重新输入:"; cin >> user_input; } total -= user_input; if (total == 0) { cout << "你赢了!" << endl; break; } // 电脑回合 int max_available = min(7, total); int com_input = rand() % max_available + 1; total -= com_input; cout << "电脑减去了" << com_input << ",剩余总数为" << total << endl; if (total == 0) { cout << "电脑赢了!" << endl; break; } } return 0; }
2. 定制策略版(匹配你给出的示例效果)
如果需要实现你提到的「剩余总数为6时,电脑减5给用户留1」的效果,只需要修改电脑回合的取值逻辑,增加自定义判断分支即可:
// 电脑回合逻辑替换为以下内容 int com_input; if (total == 6) { com_input = 5; } else { int max_available = min(7, total); com_input = rand() % max_available + 1; } total -= com_input;
验证说明
你提到的测试场景可正常复现:初始总数为10,用户输入4后剩余6,电脑取5后剩余1,用户输入1即可获胜。
内容的提问来源于stack exchange,提问作者piser fransisko
相关产品推荐
相关产品推荐

