【问题标题】:How to Generate random number in a specific range and sum?如何生成特定范围内的随机数并求和?
【发布时间】:2017-03-15 07:33:40
【问题描述】:

这不是我的作业;这正是我在阅读 C++ 时想到的。我还是个初学者。我的问题是我可以生成具有特定范围和总和的随机数吗?例如,我想生成 15 个数字,范围从 2 到 5,总和是 60。从我读的书中,我可以使用 #include 生成随机数。 uniform_int_distribution randomInt{2, 5}; //它帮助我生成从 2 到 5 的随机数。 default_random_engine{static_cast(time(0))}; //如果我第二次运行程序,它可以帮助我生成不同的数字序列。它实际上使用#include for time(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;
}

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

【问题讨论】:

  • 不,随机数不是这样工作的。这与 C++ 或一般编程无关。
  • 您是否尝试过做一些代码,如果您尝试过这样做,分享一段代码会很棒。
  • 他们有 randomInt(engine) 来生成不同的数字。
  • 这不是我的作业 ...好吧,如果你不得不说它可能 ;-)

标签: c++


【解决方案1】:

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

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

a + b + c + d = 15

a, b, c, d > 0

这将使用线性规划来解决。

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

好处是你会得到一个均匀随机的排列。

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

【讨论】:

  • 为了提高效率,使用一大群线程来生成并在第一个线程达到 60 时停止。我不确定是否需要这样做,因为给定 15 个值的概率为 60范围 2-5。如果概率很低,线程可能会有所帮助,如果它们是独立的。否则一个线程应该足够好,然后重试
猜你喜欢
  • 2016-05-04
  • 2015-04-08
  • 1970-01-01
  • 2014-10-23
  • 2018-07-22
  • 2022-07-14
  • 1970-01-01
相关资源
最近更新 更多