Skip to content

C++随机数简单应用

信息学竞赛

2021-08-24

下面这段代码给出了最基本的使用:

#include <iostream>
#include <time.h>
using namespace std;
int main() {
    srand(time(NULL));  // 设置种子,以时间戳为种子以保证每次数字不同
	rand();  // 看下面的解释
	

    // 输出一个0~RAND_MAX的数:RAND_MAX值为32767~2147483647(short和int的上限)
    cout << rand() << endl;

    // 输出一个0~100的数
    cout << rand() % 101 << endl;

    // 输出一个50~150的数
    cout << 50 + rand() % 101 << endl;

    return 0;
}

randsrand 函数本身在头文件 iostream 中(严格来讲是 stdlib.h ,但是不知道为什么这样也能行),但是为了使用时间戳作为种子,所以导入 time.h

当然一个万能头也能解决问题

如果不设置时间戳作为种子,生成的数字每次都将会是一样的

另外使用时间戳后如果密集执行程序,由于种子(时间戳)接近,每次生成的第一个随机数也十分接近,所以可以如第8行先消耗一次随机数数列的第一个。(毕竟没研究算法原理,具体原因不知道,只是根据个人使用现象总结经验)

先写到这,要是有人点赞的话再来补较大的随机数生成方案

Ukraine 在俄罗斯对乌克兰发动的野蛮的侵略战争中矢志不渝地支持乌克兰