You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 18:15:00