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

C++新手求助:如何随机选择两个非连续指定整数之一?

解决离散整数随机选择问题

嘿,刚入门C++碰到这种小困扰太正常啦!针对你要随机选1或3这类离散整数(而非连续范围)的需求,我给你几个实用的方案:

方案1:直接判断随机0/1映射目标值

最直观的方法就是用rand()生成0或1的随机数,再对应到你想要的两个整数:

#include <cstdlib>
#include <ctime>

int main() {
    srand(time(nullptr)); // 一定要先初始化随机种子,不然每次结果都一样!
    int c;
    // rand()%2 只会得到0或1,以此为判断条件
    if (rand() % 2 == 0) {
        c = 1;
    } else {
        c = 3;
    }
    // 输出验证
    // std::cout << c << std::endl;
    return 0;
}

方案2:用数组存储选项,随机选索引

这个方法扩展性更强——以后要是想选更多离散整数(比如1、3、5),只需要修改数组和随机范围就行:

#include <cstdlib>
#include <ctime>

int main() {
    srand(time(nullptr));
    int options[] = {1, 3}; // 把你要选的数都放进数组
    int index = rand() % 2; // 生成0到1的索引(数组长度是2)
    int c = options[index];
    return 0;
}

进阶方案:用C++11+现代随机库(更推荐)

rand()的随机性其实不够均匀,如果你用的是C++11及以后的版本,更建议用标准库提供的随机工具,随机性更可靠:

#include <random>

int main() {
    std::random_device rd; // 获取随机种子
    std::mt19937 gen(rd()); // 初始化随机数生成器
    // 离散分布,两个选项权重相同(都是1),会随机返回0或1
    std::discrete_distribution<> dist({1, 1});
    int options[] = {1, 3};
    int c = options[dist(gen)];
    return 0;
}

小提醒

如果用rand()的话,必须在程序开头调用srand(time(nullptr)),否则每次运行程序得到的随机序列都是一样的,就失去“随机”的意义啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:39:18