C++生成随机数

C++提供rand()用于生成范围内的随机数,它两都位于头文件cstdlib中(其实真实位置是stdlib.h文件中),RAND_MAX的取值会有所差异,一般它的值会与INT_MAX保持一致。

rand()内部是用线性同余法实现的,所以并不是真正的随机数。比如下面这段代码:

#include <iostream>
#include <cstdlib>

int main() {
    std::cout << rand() << std::endl;
    return 0;
}

上面这段代码在编译后,在同一台机器上,每次运行的结果固定是同一个值。可以理解成:随机一次,之后每次运行程序,它返回的值就确定了
rand()无srand()输出

那如何才能让每次运行返回的结果都不一样呢?这就需要用到srand()了。
srand()用于初始化随机数发生器,它接收一个unsigned int型的参数种子。一般,srand()传入time(0),来确保每次输入的种子不同。

#include <iostream>
#include <cstdlib>

int main() {
    srand(time(0));
    std::cout << rand() << std::endl;
    return 0;
}

编译运行程序,这时候每次运行程序,rand()返回的结果就不一样了,“随机”了。
rand()设置了srand()

rand()用到的算法中是通过种子来计算生成随机数的,其实最开始的那段代码中,虽然我们没有显式设置种子,但实际上这时候默认种子为0。每次传入的种子一样,那么此次程序运行调用rand()生成的随机数序列也一样

#include <iostream>
#include <cstdlib>

int main() {
    srand(0);
    std::cout << rand() << std::endl;
    return 0;
}

编译运行,这时候可以看到程序每次运行的结果又是相同的了。
rand()种子设置为0
有没有注意到,它的结果和第一张图中的是一致的?(因为我是在同一台机器上测试的)

总结一下,如果我们要在程序中使用随机数,该怎么做呢?
1、一定要调用srand()设置种子,一般,传入的值是当前机器的时间time(0),且在一个程序中只要设置一次即可。
2、好像没看见其他接口,如何获取指定范围内的随机数?rand()返回的是范围内的随机数,比如我们需要获取以内的随机数,只需要用rand() % 100即可。

全部评论

相关推荐

03-08 18:11
门头沟学院 Java
Java抽象小篮子:海投就完事了,简历没什么问题,最大问题是学历
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
正在热议
更多
# 春招至今,你的战绩如何? #
7952次浏览 73人参与
# 你的实习产出是真实的还是包装的? #
1489次浏览 37人参与
# 米连集团26产品管培生项目 #
5258次浏览 213人参与
# 军工所铁饭碗 vs 互联网高薪资,你会选谁 #
7237次浏览 39人参与
# 简历第一个项目做什么 #
31418次浏览 318人参与
# 当下环境,你会继续卷互联网,还是看其他行业机会 #
186671次浏览 1117人参与
# 巨人网络春招 #
11260次浏览 223人参与
# 研究所笔面经互助 #
118827次浏览 577人参与
# 重来一次,我还会选择这个专业吗 #
433182次浏览 3924人参与
# 简历中的项目经历要怎么写? #
309783次浏览 4174人参与
# 面试紧张时你会有什么表现? #
30443次浏览 188人参与
# AI时代,哪些岗位最容易被淘汰 #
63077次浏览 769人参与
# 正在春招的你,也参与了去年秋招吗? #
362960次浏览 2635人参与
# 你怎么看待AI面试 #
179617次浏览 1200人参与
# 职能管理面试记录 #
10765次浏览 59人参与
# 网易游戏笔试 #
6415次浏览 83人参与
# 腾讯音乐求职进展汇总 #
160501次浏览 1107人参与
# 校招笔试 #
468877次浏览 2960人参与
# 把自己当AI,现在最消耗你token的问题是什么? #
7103次浏览 156人参与
# 你觉得通信/硬件有必要实习吗? #
155417次浏览 1065人参与
# 小红书求职进展汇总 #
226997次浏览 1357人参与
# 从哪些方向判断这个offer值不值得去? #
56719次浏览 357人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务