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
相关产品推荐
相关产品推荐

