搜一下,似乎没有找到好的办法,现求助一下。谢谢先~~~
问题描述如下:
1.随机输入一个N,也就是要产生N个随机数
2.这N个随机数满足N1+N2+……+Nn=1  (可以做加权用)
3.这N个随机数随机不要均匀的,0<Ni<1随机数可以产生出来,如何确保N1+N2+……+Nn=1还没有想好,有高手指教下。谢谢先,预祝国庆节快乐,祖国60华诞生日快乐。

解决方案 »

  1.   

       N1,到Nn-1随机生成啊,最后1个 拿1 去减去 前面所有之和 就可以了。。
      

  2.   

    小弟有个想法:
        设想,如果是100而不是1的话:
        Random r = new Random();
        int sum = 100;    //产生了N-1个0-100之间的随机数
        for(int i = 0; i < N-1 ; i++)
        {
           int m = r.Next(0, sum);
           sum -=m;
        }
         //最后一个应该是sum
    现在的问题就是怎么产生 0-1之间的随机数字了
      

  3.   


      public static double[] rand(int n) {
        double[] array = new double[n];
        Random random = new Random();
        double sum = 0;
        for (int i = 0; i < n - 1; i++) {
          double d = random.nextDouble() * (1 - sum);
          array[i] = d;
          sum += d;
        }
        array[n - 1] = 1 - sum;
        return array;
      }
      

  4.   

    double d = random.nextDouble() * (1 - sum);其实随机产生的第一个数往往比较大,以改兄弟这个方法来讲呵呵