C++产生随机数

代码抠自《你好,C++!》

C++标准库中关于随机数的头文件<random>,定义相应的随机数引擎对象(reng)和分布对象(uni_dist),在定义分布对象的同时,我们以构造函数参数的形式,确定了随机数的取值范围。有了它们,就可以用引擎对象 reng 作为参数,调用 uni_dist 分布对象这个函数对象,最后得到的就是我们需要的在 0 和 25 范围之内平均分布的随机数了。在这里,我们还利用了ASCII 表中字母字符呈现连续分布的特性,在字符‘A’的基础上,加上一个随机数,就得到了我们最终想要的随机的字母字符。值得特别提醒的是,在产生随机数之前,我们必须用引擎对象的 seed()函数设置随机种子,否则,每次运行所产生的随机数序列都是一样的,那样就失去了随机的意义了。
 

// 引入随机数引擎和分布所在的头文件
#include <random>
#include <iostream>

using namespace std;

int main()
{
// 定义一个默认的随机数引擎
default_random_engine reng;
// 构建一个从 0 到 25 之间的平均分布
uniform_int_distribution<int> uni_dist(0,25);
// 使用 random_device 设置随机数引擎的种子,
// 以防止每次运行都产生相同的伪随机数序列
//使用 uniform_int_distribution 分布,表示将引擎产生的随机数字平均分布在某个范围内;
//使用 normal_distribution 分布,则表示将这些随机数字正态分布在某个范围。
random_device rnd_device;
reng.seed(rnd_device());
// 验证码一共 4 位
const int n = 4;
char code[n]; // 保存验证码的字符数组
// 提示输入验证码
cout<<"请输入下面的验证码:"<<endl;
// 利用 for 循环产生 4 个验证码字母字符
for (int i = 0; i < n; ++i)
{
// uni_dist(reng)表示让 reng 引擎按照 uni_dist 分布,
// 产生取值在 0 到 25 之间呈平均分布的随机数
// 然后在‘A’的基础上向后偏移,就得到了随机的验证码字母字符
code[i] = 'A' + uni_dist(reng);
// 输出验证码字母字符
cout<<code[i];
}
// …
return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值