| 网站首页 | 业界新闻 | 群组 | 交易 | 人才 | 下载频道 | 博客 | 代码贴 | 编程论坛
免费IT实战开发视频教程合集分享千里之行 始于足下
共有 82 人关注过本帖
标题:如何高效的生成指定区间的随机数
只看楼主 加入收藏
陈紫文
Rank: 1
等 级:新手上路
帖 子:13
专家分:4
注 册:2018-9-5
结帖率:71.43%
  已结贴   问题点数:2  回复次数:3   
如何高效的生成指定区间的随机数
生成[a,b]区间上的随机数,a>0,a,b为整数
命中率要非常高
谢谢
//我现在一个还有两分,但还是麻烦大家帮帮忙
2018-11-08 16:49
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:267
帖 子:5924
专家分:33728
注 册:2011-1-18
  得分:1 
直接看示例 https://en.cppreference.com/w/cpp/numeric/random/uniform_int_distribution
程序代码:
#include <random>
#include <iostream>

int main()
{
    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(1, 6);

    for (int n=0; n<10; ++n)
        //Use dis to transform the random unsigned int generated by gen into an int in [1, 6]
        std::cout << dis(gen) << ' ';
    std::cout << '\n';
}
就是上图中的 std::uniform_int_distribution<> dis(1, 6)

命中率要非常高
听不懂

2018-11-08 16:56
rohalloway
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:36
专家分:120
注 册:2018-9-28
  得分:1 
学习了,最近就遇到了随机数的需求问题,
时间种子的随机数,同时生成多个随机数就会出现随机数相同的问题
版主的例子非常好用,收藏起来了,谢谢!
2018-11-08 21:04
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:267
帖 子:5924
专家分:33728
注 册:2011-1-18
  得分:0 
回复 3楼 rohalloway
你是想生成无重复数字的随机数吗,那得用 std::shuffle
参见:https://en.cppreference.com/w/cpp/algorithm/random_shuffle

程序代码:
#include <random>
#include <algorithm>
#include <iterator>
#include <iostream>

int main()
{
    std::vector<int> v = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

    std::random_device rd;
    std::mt19937 g(rd());

    std::shuffle(v.begin(), v.end(), g);

    std::copy(v.begin(), v.end(), std::ostream_iterator<int>(std::cout, " "));
    std::cout << "\n";
}
可能的输出
8 6 10 4 2 3 7 1 9 5

2018-11-09 08:37







关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.022614 second(s), 8 queries.
Copyright©2004-2018, BCCN.NET, All Rights Reserved