生成n个随机变量,并将它们相乘c ++

时间:2015-11-16 22:49:23

标签: c++ random vector

为了简单起见,假设用户输入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 ++中执行此操作?

3 个答案:

答案 0 :(得分:2)

您可以修改最高限额,例如N = 1000N >= m

  1. 填充从01000的矢量,比如说I
  2. 使用I
  3. 随机播放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 的结果。这意味着即使数十个生成的数字产品平均也会非常小