在C ++中生成1到3之间的随机数

时间:2011-05-05 01:48:00

标签: c++ random

  

可能重复:
  Generating random integer from a range

我刚刚开始学习C ++,我正在尝试生成一个1,2或3的随机整数。我搜索过,我看到的生成随机数的所有例子都令人困惑,总是与上一个例子不同看着。有一种简单的方法可以做到这一点吗?

3 个答案:

答案 0 :(得分:9)

模解决方案是最直接的,但它通常会失去随机性作为模数,因为倾向于“吃掉”结果的最低位。

更随机的方法是映射[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;
}

通用版本可以从这些版本中获得,以获得滚动(T min,T max)版本。

答案 1 :(得分:8)

试试这个:

srand(time(NULL));

int randNum = (rand() % 3) + 1; // you don't need the (...) surrounding rand() % 3 but it helps for clarity

这可以通过将rand函数的返回值的剩余部分除以3(可以是0,1或2)并添加一个(以得出1,2或3)来实现)。

确保包含cstdlibctime标题。

此外,只需拨打srand一次,而不是每次生成一个随机数。

答案 2 :(得分:0)

编写一个C ++程序,生成0到50范围内的25个随机数。您应该使用队列将它们分组。输出程序的示例如下所示:

输出:

欢迎使用分类数据的演示。 我们生成25个随机数,然后使用队列将它们分组。

分类数据: 24 7 31 23 26 14 19 8 9 6 43 16 22 0 39 46 22 38 41 23 19 18 14 3 41 数据分类结束

数据0 .. 9:7 8 9 6 0 3
数据10..19:14 19 16 19 18 14
数据20..29:24 23 26 22 22 23
数据超过29:31 43 39 46 38 41 41