有人可以请我指出一个关于如何完成这个的好解释吗?由第二个数组中的值限定的随机数组
例如,假设我有一个初始化为值{3,4,5}的数组a [j]。我想用第一个数组中的值构建第二个数组,其填充的随机数由0以下的数值限定。因此,b [i]将被初始化为以下范围内的随机数:{0-3,0-4,0-5}
在C++中实现此目的的一种好方法是什么?
有人可以请我指出一个关于如何完成这个的好解释吗?由第二个数组中的值限定的随机数组
例如,假设我有一个初始化为值{3,4,5}的数组a [j]。我想用第一个数组中的值构建第二个数组,其填充的随机数由0以下的数值限定。因此,b [i]将被初始化为以下范围内的随机数:{0-3,0-4,0-5}
在C++中实现此目的的一种好方法是什么?
如果你的系统有arc4random(3)
和朋友(很可能如此),它真的很容易:
int a[3] = {3, 4, 5};
int b[3];
for (int i = 0; i < 3; i++)
{
b[i] = arc4random_uniform(a[i] + 1);
}
从手册页上面链接:
arc4random_uniform()
将返回一个32位值,均匀分布但小于upper_bound。
C++中最常用的函数是函数rand(),它生成一个介于0和RAND_MAX之间的随机数,它在cstdlib中定义。这就是为什么你需要使用模操作,在你的情况将是:
b[i] = rand() % (a[i]+1)
当心[模偏置(http://stackoverflow.com/questions/10984974/如果这对你的程序来说可能是一个问题,那么为什么这样做 - 人们说那里是模 - 偏 - 什么时候使用一个随机数发生器)。 –
你是对的!我没有想到这一点。 – Albondi