我需要使用rand()
函数来获取1到15之间的数字,所以我只使用下面的函数。
num1 = rand()%15+1;
但是在这个1-15范围之间,我想阻止一些数字被分配到num1
变量。
我考虑在那里放置一个if-else
函数,因为rand()
函数会在出现不需要的数字的情况下重复出现。
但是,我最感兴趣的是,是否有更有效的方法可以忽略rand()
函数范围内的这些不需要的数字。
非常感谢你!
答案 0 :(得分:6)
一个非常简单的解决方案:调用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 :(得分:5)
您想拥有的声音,例如集合的随机数{1,2,3,7,8,9,14,15}(不是吗?)
因此,对于此示例,这是8个不同值的计数,您可以这样做:
lookupTable[] = { 1, 2, 3, 7, 8, 9, 14, 15 };
num1 = lookupTable[rand() % 8];
我放置了一个正在运行的示例here。
答案 2 :(得分:3)
要获得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
作为建议的owacoder
你也看到视频(来自编写VS STL一部分的MS家伙)关于如何获得真实随机数的视频,以及为什么不能使用rand
:
https://channel9.msdn.com/Events/GoingNative/2013/rand-Considered-Harmful