如何在特定范围内生成随机数并求和?

时间:2017-03-15 07:33:40

标签: c++

这不是我的功课;这是我在阅读C ++时遇到的问题。我还是个初学者。我的问题是我可以生成具有特定范围和总和的随机数。例如,我想生成15个数字,范围从2到5,总和是60.从我读过的书中,我可以使用#include生成随机数。 uniform_int_distribution randomInt {2,5}; //它帮助我生成2到5的随机数。 default_random_engine {的static_cast(时间(0))}; //如果我第二次运行程序,它可以帮助我生成不同的数字序列。它实际上使用#include作为时间(0)。

#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;
}

这基本上就是它如何生成不同的数字

1 个答案:

答案 0 :(得分:2)

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

2a + 3b + 4c + 5d = 60

a + b + c + d = 15

a,b,c,d&gt; 0

它将使用线性编程解决。

一旦你解决了这个问题,你就可以采取解决方案并随机进行随机抽样以获得随机排列。

好处是你将得到一个统一的随机排列。

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