问题描述
- C#产生100个随机数,要求它们的和是100,请问怎么实现?要充分随机化。
-
C#产生100个随机数,要求它们的和是100,请问怎么实现?要充分随机化。
解决方案
产生100个随机数,然后按比例缩放。
要具体程序,请先采纳。
解决方案二:
Random ran=new Random();
int RandKey=ran.Next(0,99);
for(int i=0;i<100;i++){
首先生成一个0到99的随机数,然后用100减去生成的随机数
int temp=ran.Next(0,100-RandKey);
}
最后一个不用生成
解决方案三:
private List Get100Numbers()
{
List rlts = new List();
double sum = 0;
for (int i = 0; i < 100; i++)
{
double number = this.GetRandomValue(i);
sum += number;
rlts.Add(number);
}
double rate = 100 / sum;
sum = 0;
for (int i = 0; i < rlts.Count; i++)
{
rlts[i] = rlts[i] * rate;
sum += rlts[i];
}
return rlts;
}
private double GetRandomValue(int index)
{
Random r = new Random((int)DateTime.Now.Ticks + index);
double rlt = r.NextDouble() * 100;
return rlt;
}
解决方案四:
Random rnd = new Random();
var query = Enumerable.Range(0, 100).Select(x => rnd.NextDouble())ToArray();
var query = query.Select(x => x / query.Sum() * 100.0).ToArray();
解决方案五:
Random rnd = new Random();
var query = Enumerable.Range(0, 100).Select(x => rnd.NextDouble())ToArray();
query = query.Select(x => x / query.Sum() * 100.0).ToArray();