我有一点问题需要您的帮助。我有四个标签,我想在它们上显示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
值的机会相同吗? 最佳答案
您可以执行以下操作:
double alpha = 0, beta = 0, gamma = 0, delta = 0, k = 0;
Random rnd = new Random();
alpha = rnd.Next(0, 100);
beta = rnd.Next(0, 100);
gamma = rnd.Next(0, 100);
delta = rnd.Next(0, 100);
k = (alpha + beta + gamma + delta) / 100;
alpha /= k;
beta /= k;
gamma /= k;
delta /= k;
cInsertion.Text = alpha.ToString();
cMoyens.Text = beta.ToString();
cInternational.Text = gamma.ToString();
cRecherche.Text = delta.ToString();
这样,您说的是让我们为所有4个变量取一个随机值,然后用
k
因子对其进行缩放,使它们的总和为100。关于c# - 如何生成总计为预定值的N个随机值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5842651/