C++ 随机整数范围为0到100,结果之和也不能超过100

C++ 随机整数范围为0到100,结果之和也不能超过100,c++,c++11,C++,C++11,因此,生成器会询问“40+20是什么”用户输入60以使其有效,如果生成器打印出80+80,答案将是平均160,但它不应超过100,我如何限制随机数,使总数不会超过100?如果您需要实际的均匀分布(如公平掷骰子),您可以先滚动总和,然后滚动总和成分之一: std::random_device rd; std::mt19937 gen(rd()); std::uniform_int_distribution<> dist1(0, 100); int sum = dist1(gen)

因此,生成器会询问“40+20是什么”用户输入60以使其有效,如果生成器打印出80+80,答案将是平均160,但它不应超过100,我如何限制随机数,使总数不会超过100?

如果您需要实际的均匀分布(如公平掷骰子),您可以先滚动总和,然后滚动总和成分之一:

std::random_device rd; 
std::mt19937 gen(rd()); 
std::uniform_int_distribution<> dist1(0, 100);

int sum = dist1(gen);

std::uniform_int_distribution<> dist2(0, 100 - sum);

int a = dist2(gen);
int b = sum - a;
或者天真的版本:

int a = rand() % 100;
int b = rand() % (100 - a);
你说的“随机”是什么意思

数字5是一个随机数。我只是通过滚动一个6面模具来选择它。您的总和可以始终为5+5=10

你可能是说“一致随机”。但是统一的超过了什么

如果希望答案在0到100之间保持一致,请首先选择答案,然后从0到答案的两个值中选择一个

缺点是,0作为一个和与100一样常见,而且只有一组从0到100的数字加起来等于0,100对数字加起来等于100

如果希望每个可能的方程都有相同的机会,一种简单的方法是生成两个从0到100的随机数,然后取最大的。这是你的答案。现在,选择一个从0到该和的随机数;这是第一个值。第二个值是减去第一个值的和

另一种更简单的方法是只选择一个从0到100的随机数。然后从0到100中选择第二个数字(第一个数字)。这种分布对于每个可能的方程都有不均匀的发生几率:0+0的发生几率为1/10000(0.01%),100+0的发生几率为1.01%,几乎是100倍


但是,如果您不太关心分发,那也没关系。

您是否能够在不超过100个限制的情况下实现此功能?如果是,请提供代码。您只能将单个值限制在100以下。问题是您随机选择了两个值,它们必须小于100。我可以在数组中选择3和99,也可以选择3和25。第一对无效,但第二对无效(并且可能使用的是同一个值为3的插槽。您需要提供有关您的需求的更多详细信息。这有一个缺点,即它倾向于在0的高端给出答案-100@Yakk-AdamNevraumont是真的。我没有考虑到这一点,但对于一个用例来说,这似乎是一个合理的奖励,所以我添加了正确的解决方案作为altErnactive.has必须使用rand(),基本上是一个三年级的测验,用户输入他们想要的问题数量,但这些问题的总和不能超过100,让所有其他的事情都只需要计算出总和的上限,这样我就可以得到代码。第一个例子有时被称为Randall数。@user4581301不,Randall得了4分。
int sum = rand() % 100;
int a = rand() % (100 - sum);
int b = sum - a;
int a = rand() % 100;
int b = rand() % (100 - a);