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