如何从 rand() 函数的范围中省略一些数字?
How to omit some numbers from rand() function's range?
我需要使用rand()
函数来获取1-15之间的数字,所以我只使用了下面的函数。
num1 = rand()%15+1;
但在这个1-15的范围内,我想防止一些数字被分配到num1
变量中。
我想在那里放一个if-else
函数,因为rand()
函数会在出现不需要的数字的情况下重复它自己。
然而,我最好奇的是,是否有更有效的方法可以从rand()
函数的范围中省略这些不需要的数字。
非常感谢!
一个非常简单的解决方案:用一个等于输出范围内数字总数的模值调用rand()
。然后定义一个映射函数,将值映射到所需的特定输出范围中。
例如:要获得1到5或11到15之间的随机值,包括:
int map(int val)
{
if (val > 5)
return val+5;
else
return val;
}
int value = rand()%10+1;
value = map(value);
你想要的声音,例如集合{1,2,3,7,8,9,14,15}的随机数(不是吗)?
因此,对于这个例子,这是一个8个不同值的计数,你可以这样做:
lookupTable[] = { 1, 2, 3, 7, 8, 9, 14, 15 };
num1 = lookupTable[rand() % 8];
我在这里放了一个运行示例。
要获得1到15之间的真实随机数,可以使用这样的C++11代码:
#include <iostream>
#include <random>
int main()
{
std::random_device rd;
std::mt19937 mt(rd());
std::uniform_int_distribution<int> dist(1, 15);
for (int i = 0; i < 100; ++i)
std::cout << dist(mt) << ", ";
}
要删除其中的一些数字,您可以使用map
作为编码器的建议你还可以看到视频(来自MS guy,他写了VSSTL的一部分),关于如何获得真正的随机数,以及为什么rand
不能用于此:
https://channel9.msdn.com/Events/GoingNative/2013/rand-Considered-Harmful
相关文章:
- 从C++中的数字输入动态创建矩阵
- 试图在c++中对数字列表进行排序
- 使用fstream对txt文件中的数字进行循环
- 用C++中的数字和条件填充向量
- uint_not_usable_without_attribute在业力规则中使用数字生成器时静态断言失败
- 使用 BMI 计算器对C++中的数字进行四舍五入的问题
- 整数区间(或 int 数组)中每个数字的出现次数
- 如何从适合一定范围的数字中提取数字?
- 递归形成字符串中所有数字字符的中间和?
- 如何在BST树中对数字的乘积收费?
- 如何从保存在 Java 中C++的字节数组中读取数字?
- 如何在 setup() 函数中使用数字引脚转动电机?
- 如果相同的数字重复,如何比较流中的数字
- 从迭代器中提取数字
- C ++:检查它是否是类中的数字
- 如何在向量中某个数字之后重新计算进程
- 我必须找到给定数组中所有数字的周期,就像有很多解决方案,但数组的大小是 10^5
- 查找数组中给定数字的出现次数
- 循环中的线程 Runnin 用于对 c++ 中的数字求和
- 在 C++ 中分解数字