【问题标题】:Need to generate random numbers from 100 to 500需要生成100到500的随机数
【发布时间】:2017-12-24 00:25:51
【问题描述】:

对于我的课堂作业,我必须生成 120 个随机数,范围从 100 到 500。这是我现在使用的代码。
下面是输出的剪切和粘贴:我期待的数字在 100 到 500 之间。我不确定我做错了什么。我没有得到想要的结果。如何修复它以获取 100-500 的数字?

跑 -10 跑 -9 跑 -9 跑 -8 跑 -7 跑 -6 跑 -6 跑 -5 跑 -4 跑 -4 跑 -4 跑 -2 跑 -1 跑 -1 跑 1 跑 1 跑2跑3跑3跑4跑4跑4跑5跑6跑6跑6跑7跑7跑8跑8跑9跑9跑10跑10跑10跑11

void create_random_numbers(int ran[], int x) 
{
    unsigned seed = time(0);

    srand(seed);
    int random_integer;
    for (int index = 0; index<400; index++)
    {

    //  cout << random_integer << endl<<endl;
        ran[index] =  (rand()%500)+100;

        cout << "ran "<< ran[index] << endl << endl;
    }

}

【问题讨论】:

  • 好的,请问有什么问题?
  • 下面是输出的剪切和粘贴:我期待的数字在 100 到 500 之间。我不确定自己做错了什么。我没有得到想要的结果。跑 -10 跑 -9 跑 -9 跑 -8 跑 -7 跑 -6 跑 -6 跑 -5 跑 -4 跑 -4 跑 -4 跑 -2 跑 -1 跑 -1 跑 1 跑 1 跑 2 跑 3跑3跑4跑4跑4跑5跑6跑6跑6跑7跑7跑8跑8跑9跑9跑10跑10跑10跑11
  • @jess 你还没有问过问题。请相应地编辑帖子。 (如果你想显示一些输出,更新你的帖子)

标签: c++ arrays random numbers


【解决方案1】:

另一种方式是使用统一的int分布 产生随机整数值i,均匀分布在闭区间[a,b]上,即按照离散概率分布

function
P(i|a,b) = 1/(b − a + 1)
.
#include <random>
#include <iostream>
#include <array>

int main()
{
    std::array<int, 120> numbers;
    std::random_device rd;  //Will be used to obtain a seed for the 
                            //random number engine
    std::mt19937 gen(rd()); //Standard mersenne_twister_engine seeded 
                            // with rd()
    std::uniform_int_distribution<> dis(100, 500);

    for (int n = 0; n < 120; ++n)
        //Use dis to transform the random unsigned int generated by gen 
        //into an int in [100, 500]
        numbers[n] = dis(gen);

    for (auto i : numbers) {
        std::cout << ' ' << i;
    }
    std::cout << '\n';
    return 0;
}

【讨论】:

  • 在发布我的问题之前,我确实使用了统一的 int 分布方法,它确实有效。但是我想不出一种方法将生成的值放入我的数组中。我试过 std:: myarray[]
  • 再次感谢您的帮助。
【解决方案2】:

rand() % 500 产生的值在[ 0...499 ] 范围内,所以100 + [ 0 ... 499 ] 产生值[ 100... 599 ] 包括在内。你需要rand() % 400 + 100

查看以下更正后的代码:

void create_random_numbers(int ran[]) 
{
    unsigned seed = time(0);

    srand(seed);
    int random_integer;
    for (int index = 0; index < 120; index++)
    {
        ran[index] =  (rand() % 400) + 100;
        cout << index << " : " << ran[index] << endl << endl;
    }
}

查看我制作的演示:Demo

【讨论】:

  • 哇,真快。它有效!太感谢了。从昨天开始我就一直在做这个,并且在我第一次尝试时就这样写了,但显然我的语法一定是错误的。
  • 很高兴它有帮助:)
猜你喜欢
  • 1970-01-01
  • 2015-01-25
  • 1970-01-01
  • 2011-01-23
  • 2015-12-14
  • 2020-06-17
  • 2022-06-12
相关资源
最近更新 更多