为了简单起见,假设用户输入n = 2,我想要发生的是将两个(或n个)随机数相乘。它适用于任何n,随机数在0和1之间。
I have been using this for random numbers between 0 and 1
(double)rand()/(double)RAND_MAX for this.
So to break it down further
n= 1
random_number = random_number
n = 2
random_number = random_number * random_number
n = 3
random_number = random_number * random_number * random_number
n = ...
random_number = random_number * random_number * ...
问题是随机数也必须是唯一的。例如,对于n = 2的情况,它应该是......
random_number = (unique)random_number * (unique)random_number
为了使问题进一步复杂化,我们还说我有m(非静态)除法,并且我创建了一个大小为m ^ n的向量。我还需要创建这个大小为m ^ n的向量为...
vector = [rand*rand, rand*rand, rand*rand, rand*rand]
for the case when n = 2 m = 2
我将如何在c ++中执行此操作?
答案 0 :(得分:2)
您可以修改最高限额,例如N = 1000
,N >= m
。
0
到1000
的矢量,比如说I
I
std::random_shuffle()
醇>
选择第一个m
个数字,然后将每个数字除以N
。
这应该是它。
N
的值越大,您提供数字的空间就越大。
或者,您可以将N
设置为1000,然后像我提到的那样随机播放I
,然后对于I
中的每个数字,生成从数组中选取的最终随机除数可能看起来像[10, 100, 1000, 10000,...]
答案 1 :(得分:2)
获取n
个随机数只需重复使用rand()
即可生成它们。如果您希望它们是唯一的,请将它们放在std::set<int>
中。这样,您可以检查它是否已生成。一旦你拥有了唯一的集合,就可以对它们进行任何处理 - 即使它们落在0和1之间,然后将它们相乘。
答案 2 :(得分:0)
对于U(0,1),随机数均值为1/2。因此,乘以N
均匀随机数将产生平均等于1/2 N 的结果。这意味着即使数十个生成的数字产品平均也会非常小