c++实现简单随机数的代码

c++简单随机数

#include<iostream>
#include<ctime>
#include<cstdlib>
using namespace std;
int random(int n)
{
	return (long long)rand()*rand%n;
}

int main()
{
	srand(unsigned(time(0)));
	//
	//求负数随机数,先产生0-2n之间的随机整数,再减去n就得到了-n - n 之间的数

}

实例扩展:

随机数引擎都需要一个种子,生成的都是伪随机数。

引擎适配器可以套一个随机数引擎:

  • discard_block_engine在连续若干个伪随机数中选择若干个;
  • independent_bits_engine把位数多的伪随机数压缩成位数少的;
  • shuffle_order_engine把连续若干个伪随机数重排。

套娃的方式是模板,理论上你还可以用适配器套适配器,不过CPU可能会有意见。

随机数引擎的模板参数怎么取?标准定义了一些数学家们发现的效果良好的随机数引擎:LCG minstd_rand0、minstd_rand、knuth_b;MT mt19937、mt19937_64;LFG ranlux24_base、ranlux48_base、ranlux24、ranlux48。如果你还是无从下手,那就用default_random_engine,编译器的开发者们为你选好了他们认为最合适的,在MSVC中是mt19937,在GCC中是minstd_rand0。

以上工具都生成伪随机数,标准还定义了真·随机数引擎random_device,尽管标准也允许它是伪随机的。如果它是真随机的,那么使用起来它的效果无疑是最好的,但是多次调用后性能会急剧下降,通常只用于生成伪随机数引擎的种子。

随机数生成器类型都定义了静态方法min和max,返回生成的随机数的范围,以及无参数的函数调用运算符operator(),返回随机数。

#include <iostream>
#include <random>

int main()
{
  auto engine = std::default_random_engine(std::random_device()());
  std::cout << "min = " << engine.min() << "; max = " << engine.max() << std::endl;
  std::cout << "random numbers: ";
  for (int i = 0; i != 10; ++i)
    std::cout << engine() << ' ';
  std::cout << std::endl;
}

到此这篇关于c++实现简单随机数的代码的文章就介绍到这了,更多相关c++简单随机数内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • C++常见获取随机数的方法小结

    本文实例讲述了C++常见获取随机数的方法.分享给大家供大家参考,具体如下: 方法一: 使用 rand 函数可以获取,如下. #include<iostream> #include<ctime> using namespace std; int main() { for (int i = 0; i < 10; i++) cout << rand() << endl; return 0; } 随机数大小是在0到RAND_MAX,值为2147483647,它

  • C++实现产生随机数和相应的猜拳小游戏实例代码

    一.简介 c++中,产生随机数的通用方法就是调用 srand()和 rand()  函数. Rand 单纯的rand()会返回一个0至RAND_MAX之间的随机数值,而RAND_MAX的值与int位数有关,最小是32767.不过rand()是一次性的,因为系统默认的随机数种子为1,只要随机数种子不变,其生成的随机数序列就不会改变. 其实,对于rand()的范围,我们是可以进行人为设定的,只需要在宏定义中定义一个random(int x)函数,就可以生成范围为0至x的随机数值.当然,也可以定义为r

  • C++产生随机数的实现代码

    C++怎样产生随机数:这里要用到的是rand()函数, srand()函数,C++里没有自带的random(int number)函数. (1) 如果你只要产生随机数而不需要设定范围的话,你只要用rand()就可以了:rand()会返回一随机数值, 范围在0至RAND_MAX 间.RAND_MAX值至少为32767.例如: 复制代码 代码如下: #include<stdio.h>#include <iostream> 复制代码 代码如下: int _tmain(int argc,

  • C++编程产生指定范围内的随机数

    C/C++编程产生指定范围内的随机数,直接上个小程序: #include <stdlib.h> #include <time.h> #include <stdio.h> #include <string> #include <string.h> /* * 获取随机数 * return : 随机数 */ int commonGetRandNumber(const int low, const int high) { int randNum = 0;

  • C++ 随机数字以及随机数字加字母生成的案例

    我就废话不多说了,大家还是直接看代码吧~ #include <time.h> #include <sys/timeb.h> void MainWindow::slot_clicked() { QString strRand; int length = 32; QString strTmp = "1234567890QWERTYUIOPASDFGHJKLZXCVBNM"; struct timeb timer; ftime(&timer); srand(t

  • c++ 随机数问题的相关研究

    1.问题背景 某项目中有个复杂的排序,先是各种规则依次排序,最后如果依然并列的话,那就随机位置,名次并列.测试中发现一个诡异现象,并列时随机排序但随机后2个case打印的顺序每次都一样,随机数没有起到任何作用.经过分析发现,随机数种子srand(clock()),本意是希望连续调用这个函数,给多个随机数设置种子,实际上设置的种子相同,最后产生的随机数是伪随机数.那么有没有一种随机数方法可以在较快的循环中,保证随机性呢? 原问题较复杂,给个类似的例子说明具体场景: void test_random

  • c++实现简单随机数的代码

    c++简单随机数 #include<iostream> #include<ctime> #include<cstdlib> using namespace std; int random(int n) { return (long long)rand()*rand%n; } int main() { srand(unsigned(time(0))); // //求负数随机数,先产生0-2n之间的随机整数,再减去n就得到了-n - n 之间的数 } 实例扩展: 随机数引擎

  • C#实现的简单随机数产生器功能示例

    本文实例讲述了C#实现的简单随机数产生器功能.分享给大家供大家参考,具体如下: 运行效果如下: 具体代码如下: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace Math { public parti

  • vue中的非父子间的通讯问题简单的实例代码

    官网上的例子好晦涩,看了一个头两个大,关于非父子间的通讯问题,经过查阅得到了下面的例子, <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>兄弟之间的通讯问题</title> <script src="vue.js"></script> </head>

  • 用js编写的简单的计算器代码程序

    最近编写的一个简单的计算器代码程序,先给大家展示一下 分享代码如下 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta htt

  • JavaWeb中的简单分页完整代码(推荐)

    这次主要是讲解一下通过登录后对得到的数据进行分页,首先我们新建一个登录页面login.jsp,因为我们主要学习一下分页,所以登录验证的部分不再阐述,主要代码如下: <form action="pageServlet"> 用户名:<input type="text" name="username"><br> 密 码:<input type="text" name="passwo

  • JS实现的N多简单无缝滚动代码(包含图文效果)

    本文实例讲述了JS实现的N多简单无缝滚动代码.分享给大家供大家参考,具体如下: 实现原理很简单,注册事件之后,立即将元素的innerHTML累加一次. 接着滚动开始,当滚动条到达元素的中间位置时: 不要在子元素上设置margin和padding,因为CSS对margin或padding的叠加机制,会导致滚动出现"跳跃".稳妥的办法是套一个内联元素,然后再在里面设置margin或者padding! 运行效果截图如下: 在线演示地址如下: http://demo.jb51.net/js/2

  • 分享两段简单的JS代码防止SQL注入

    1.URL地址防注入: //过滤URL非法SQL字符 var sUrl=location.search.toLowerCase(); var sQuery=sUrl.substring(sUrl.indexOf("=")+1); re=/select|update|delete|truncate|join|union|exec|insert|drop|count|'|"|;|>|<|%/i; if(re.test(sQuery)) { alert("请勿

  • 一个php生成16位随机数的代码(两种方法)

    分享一个php生成16位随机数的代码,php生成随机数的二种方法. 方法1 复制代码 代码如下: <?php $a = mt_rand(10000000,99999999); $b = mt_rand(10000000,99999999); echo $a.$b; 方法2: <?php $a = range(0,9); for($i=0;$i<16;$i++){ $b[] = array_rand($a); } // www.yuju100.com var_dump(join("

  • html+js实现简单的计算器代码(加减乘除)

    html+js实现简单的计算器代码(加减乘除) <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title></title> </head> <body> <table> <tr> <td&

  • 通过javascript的匿名函数来分析几段简单有趣的代码

    1.简单形式的封装调用 复制代码 代码如下: var userName = function() { return "jeff wong" } (); alert(userName); 上面的代码确实简单,我们可以逐步分解成下面的写法: 复制代码 代码如下: var anonymousFunc = function() { return "jeff wong" }; //匿名函数 var name = anonymousFunc(); //执行该函数 返回人名 al

随机推荐