【发布时间】:2011-08-16 02:32:08
【问题描述】:
我需要你的帮助来解决一个小问题。我有四个标签,我想在它们上显示 0 到 100 之间的随机值,它们的总和必须是 100。
这是我的代码:
private void randomly_Click(object sender, EventArgs e)
{
double alpha = 0, beta = 0, gamma = 0, delta = 0;
double temp;
int tempDouble;
Random rnd = new Random();
alpha = rnd.Next(0, 100);
temp = 100 - alpha;
tempDouble = (int)temp;
beta = rnd.Next(0, tempDouble);
temp = 100 - (alpha + beta);
tempDouble = (int)temp;
gamma = rnd.Next(0, tempDouble);
temp = 100 - (alpha + beta + gamma);
tempDouble = (int)temp;
delta = rnd.Next(0, tempDouble);
temp = alpha + beta + delta + gamma;
temp = 100 - temp;
temp = temp / 4;
alpha = alpha + temp;
beta = beta + temp;
gamma = gamma + temp;
delta = delta + temp;
cInsertion.Text = alpha.ToString();
cMoyens.Text = beta.ToString();
cInternational.Text = gamma.ToString();
cRecherche.Text = delta.ToString();
}
问题是我让 alpha 有机会获得 biggest 值,而对于 delta 则获得 lowest 值。
有没有办法让他们都有相同的机会获得真正的random 值?
【问题讨论】:
-
一个真实随机数?简而言之,没有。只有一个伪随机数。随机数生成器在时钟周期之外运行,并且通常会看到重复的序列。使用的种子取决于当前 DateTime.Now 的 .Tick 属性(如果我没记错的话)。 .Net 有很多不错的随机数生成器和 API。如果您觉得自己没有时间或不想自己动手,我建议您搜索它们。