我刚刚开始学习C ++,我正在尝试生成一个1,2或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)来实现)。
确保包含cstdlib
和ctime
标题。
此外,只需拨打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