gpt4 book ai didi

c# - 如何生成总和为预定值的 N 个随机值?

转载 作者:IT王子 更新时间:2023-10-29 04:26:21 25 4
gpt4 key购买 nike

我需要你的帮助来解决一个小问题。我有四个标签,我想在它们上面显示 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 机会获得最大值,而给 delta 机会获得最低值。

有没有什么办法可以让他们有相同的机会获得真正的随机值?

最佳答案

你可以这样做:

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/

25 4 0
文章推荐: c# - 如何在 C# 中查找滚动查看器的垂直滚动条宽度
文章推荐: javascript - 传单:panTo Web 墨卡托坐标 (EPSG 3857)
文章推荐: javascript - jQuery 滚动到元素底部而不是顶部
文章推荐: c# - 为什么我不能从 List 转换为 List