现在的位置: 首页 > 综合 > 正文

C++产生随机数

2019年05月17日 ⁄ 综合 ⁄ 共 1121字 ⁄ 字号 评论关闭

说明

//在这里srand的作用很重要,srand()的作用是初始化随机数种子,种子的伪随机数计算的依据,
//种子相同,计算得到的随机数也是相同的,通常函数没有用到srand()而是用rand(),则是相当于调用了srand(1),
//这也解决了我上学期做最后那个记忆游戏时,每次重新运行程序时,产生的随机数都是相同的问题
//time(NULL)返回的值是自1970.1.1零点以来经过的秒数,所以每时每刻都是不同的

代码

#include<stdio.h>
#include<time.h>    //time()
#include<stdlib.h>  //srand()+rand()
int main()
{
    srand(time(NULL));
    //产生[a,b]
    int m = rand() % a + b;
    printf("%d\n", m);
}

//主要是生成随机数,但是rand()函数生成随机数区间为[0,RAND_MAX]

//RAND_MAX至少为32767(2e15-1),并且在不同条件下数值可能不同

//这里作者用了放大的方式将区间放大(代码来自刘汝佳)

#include<stdio.h>
#include<time.h>    //time()
#include<stdlib.h>  //srand()+rand()
int n = 100, m = 100000;

//这个函数是取得[0,1]区间内的实数,之后在下一个函数中扩大(n-1)倍在取整

double random()
{
    return (double)rand() / RAND_MAX;
}
int random(int m)
{
    return (int)(random()*(m - 1) + 0.5);
}
int main()
{
    srand(time(NULL));
    printf("%d %d\n", n, m);
    for (int i = 0; i < m; i++)
    {
        if (rand() % 2 == 0)
        {
            printf("A");
        }
        else
        {
            printf("B");
        }
        int X, Y;
        for (;;)
        {
            X = random(n) + 1;
            Y = random(n) + 1;
            if (X != Y)
            {
                break;
            }
        }
        printf("%d %d\n", X, Y);
    }
    return 0;
}

抱歉!评论已关闭.