生成n个0~1之间的随机数,并且它们的和为1(JAVA)
这是我在百度看到的一个题。
要实现一个算法:生成n个0~1之间的随机数,并且它们的和为1,不知道怎么弄?我写了一个算法是这样的,但是老是算不出来,看来要指定和为1的确很难找到。
我的程序源码如下(谁有更好的方法?感觉我的算法不太科学):
import java.util.*;
public class random
{
public static void main(String[] args)
{
double random=0.0,sum=0.0;
double a[]=new double[10];//这里的n为10
for(int i=0;i<9;i++)//先算前面9个
{
do
{
sum-=random;//如果sum>=1,则减去random
random = Math.random();
sum+=random;
}while(sum>=1);
a[i]=random;
sum+=random; //进入上面的do-while循环时要减去random,所以在这要先加上一个random
}
do
{
sum-=random;//for循环退出之时多加了一次random
random = Math.random();
sum+=random;
}while(sum!=1);
a[9]=random;
for(int i=0;i<10;i++)
System.out.println(a[i]);
}
}