这不是我的功课;这是我在阅读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;
}
这基本上就是它如何生成不同的数字
答案 0 :(得分:2)
我怀疑这个问题只有一个解决方案:
2a + 3b + 4c + 5d = 60
a + b + c + d = 15
a,b,c,d&gt; 0
它将使用线性编程解决。
一旦你解决了这个问题,你就可以采取解决方案并随机进行随机抽样以获得随机排列。
好处是你将得到一个统一的随机排列。
如果您不关心效率和解决方案分布的均匀性,那么您可以在2到5之间生成15个数字,看看如果不生成另外15个数字,它们总和为60,等等