如何在特定范围和总和中生成随机数

How to Generate random number in a specific range and sum?

本文关键字:随机数 范围      更新时间:2023-10-16

这不是我的作业;当我阅读有关C 时,这就是我所提出的。我仍然是初学者。我的问题是我可以生成具有特定范围和总和的随机数。例如,我想生成15个数字,范围从2到5,总和为60。从我阅读的书中,我可以使用#include生成随机数。uniform_int_int_distribution RandomInt {2,5};//它可以帮助我生成2到5的随机数。default_random_engine {static_cast(time(time(0))};//如果我第二次运行程序,它可以帮助我生成不同的数字序列。它实际上在时间(0)中使用#include。

#include <iostream>
#include <ctime>
#include <random>
using namespace std;
int main()
{
    int randomNumber = 0;
    default_random_engine engine{ static_cast<unsigned int>(time(0)) };
    uniform_int_distribution<unsigned int> randomInt{ 1, 6 };

    for (unsigned int i = 0; i <= 10; ++i)
    {
        randomNumber = randomInt(engine);
        cout << randomNumber << endl; 
    }
    system("PAUSE");
    return 0;
}

这只是基本上是如何生成不同数字

的方式

我怀疑这个问题只有一种解决方案:

2a 3b 4c 5d = 60

a b c d = 15

a,b,c,d> 0

它将使用线性编程来解决。

解决了这一问题后,您可以采用解决方案并进行随机洗牌以获取随机排列。

好处是您将获得统一的随机排列。

如果您不关心效率和解决方案分布的均匀性,则可以在2到5之间生成15个数字,看看它们是否总和60,如果不生成15个数字,等等