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

如何根据猜测结果生成比前一个随机数更大或更小的随机整数?

实现动态范围的随机数猜测游戏

嘿,我完全get到你的需求了——你不想用那种生硬的循环加减1来调整随机数,而是希望根据用户的猜测结果动态缩窄随机数的生成区间:猜小了,下次就在更大的区间里生成新数;猜大了,就在更小的区间里生成。这其实是经典猜数字游戏的优化逻辑,核心靠维护一对「上下边界」来实现,下面给你完整的实现方案:

#include <iostream>
#include <cstdlib>
#include <ctime>
#include <string>
using namespace std;

int main(){
    int counter = 0;
    unsigned int guess;
    // 初始化随机数种子,确保每次运行生成不同的随机序列
    srand(time(NULL));

    // 定义初始随机数范围,这里默认1-100,你可以按需修改
    unsigned int lower_bound = 1;
    unsigned int upper_bound = 100;
    // 在初始区间内生成第一个随机数
    unsigned int random_number = rand() % (upper_bound - lower_bound + 1) + lower_bound;

    cout << "欢迎玩猜数字游戏!我已经想好了一个" << lower_bound << "到" << upper_bound << "之间的数~" << endl;

    while (true) {
        counter++;
        cout << "请输入你的猜测:";
        cin >> guess;

        if (guess == random_number) {
            cout << "牛啊!你用了" << counter << "次就猜对了!" << endl;
            break;
        } else if (guess < random_number) {
            cout << "猜小啦!下次试试更大的数~" << endl;
            // 调整下限:下一次的随机数必须比当前猜测大,所以把下限设为guess+1
            lower_bound = guess + 1;
            // 在新的有效区间内生成下一个随机数
            random_number = rand() % (upper_bound - lower_bound + 1) + lower_bound;
        } else {
            cout << "猜大啦!下次试试更小的数~" << endl;
            // 调整上限:下一次的随机数必须比当前猜测小,所以把上限设为guess-1
            upper_bound = guess - 1;
            // 在新的有效区间内生成下一个随机数
            random_number = rand() % (upper_bound - lower_bound + 1) + lower_bound;
        }

        // 边界保护:防止用户输入超出当前区间的数导致边界交叉,重置游戏
        if (lower_bound > upper_bound) {
            cout << "哎呀,范围出错了!咱们重新开始吧~" << endl;
            lower_bound = 1;
            upper_bound = 100;
            random_number = rand() % (upper_bound - lower_bound + 1) + lower_bound;
            counter = 0;
        }
    }

    return 0;
}

核心逻辑说明:

  • 动态边界调整:用lower_bound和upper_bound实时记录当前随机数的有效范围,每次猜测后更新边界,确保下一次生成的随机数完全符合「猜小变大,猜大变小」的要求。
  • 区间随机数生成公式:rand() % (upper_bound - lower_bound + 1) + lower_bound是生成[lower_bound, upper_bound]闭区间内随机整数的标准写法,保证每次生成的数都在当前有效范围内。
  • 健壮性保护:加入了lower_bound > upper_bound的判断,避免用户输入不符合当前区间的数导致逻辑崩溃,提升游戏的容错性。

这样实现就完全替代了原有的「加1/减1」生硬逻辑,每次的随机数都是在合理区间内生成的,游戏体验也更顺畅~

内容的提问来源于stack exchange,提问作者pleka7

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:51:27