可能重复:
从范围生成随机整数
我刚刚开始学习C++,我正在尝试生成一个1,2或3的随机整数.我搜索过,我看到的生成随机数的所有例子都令人困惑,总是与我看到的最后一个例子不同.有一个简单的方法吗?
模数解决方案是最直接的,但它通常会失去随机性作为模数,因为倾向于"吃掉"结果的最低位.
一种更随机的方法是映射[0,1 [over [a,b [以线性方式:
int roll(int min, int max)
{
// x is in [0,1[
double x = rand()/static_cast<double>(RAND_MAX+1);
// [0,1[ * (max - min) + min is in [min,max[
int that = min + static_cast<int>( x * (max - min) );
return that;
}
Run Code Online (Sandbox Code Playgroud)
通用版本可以从这些版本中获得,以获得滚动(T min,T max)版本.
试试这个:
srand(time(NULL));
int randNum = (rand() % 3) + 1; // you don't need the (...) surrounding rand() % 3 but it helps for clarity
Run Code Online (Sandbox Code Playgroud)
这通过将rand函数的返回值的剩余部分除以3(可以是0,1或2)并添加一个(以得出1,2或3)来工作.
确保包含cstdlib和ctime标题.
此外,srand只调用一次,而不是每次生成一个随机数.
| 归档时间: |
|
| 查看次数: |
45499 次 |
| 最近记录: |