美文网首页
c/c++生成随机数

c/c++生成随机数

作者: DeepWeaver | 来源:发表于2017-10-07 20:49 被阅读36次

    rand()

    • 生成一个0~RAND_MAX的随机数

    RAND_MAX的范围最少是在32767之间(int)。用unsigned int 双字节是65535,四字节是4294967295的整数范围。0~RAND_MAX每个数字被选中的机率是相同的。

    #include <iostream>
    using namespace std;
    int main()
    {
        cout<<rand()<<endl;
        return 0;
    }
    
    运行结果:
    16807
    [Finished in 0.3s]
    

    该函数原型为 int rand() , 无参数,产生一个范围在0到RAND_MAX之间的数,通过取余可以获得指定范围的随机数。
    要取得0~1之间的浮点数,可以使用rand() / double(RAND_MAX)

    • 生成一个0~x的随机数

    #include <iostream>
    using namespace std;
    int random(int x){
        return rand()%x;
    }
    int main()
    {
        for(int i=0;i<10; i++){
            cout<<" "<<random(10);
        }
        cout<<endl;
        return 0;
    }
    
    运行结果:
     7 9 3 8 0 2 4 8 3 9
    [Finished in 0.3s]
    
    • 生成一个m~n的随机数

    #include <iostream>
    using namespace std;
    int random(int m, int n){
        if(m>n){
            return rand()%(m-n+1)+n;
        }
        else if(m==n){
            return m;
        }
        else{
            return rand()%(n-m+1) + m;
        }
    }
    int main()
    {
        for(int i=0;i<10; i++){
            cout<<" "<<random(5,15);
        }
        cout<<endl;
        return 0;
    }
    
    运行结果:
     15 6 5 11 13 8 7 5 14 9
    [Finished in 0.3s]
    

    以上的代码生成的随机数范围是[m, n],通过不同的设定,随机数可以是[m, n)或是(m, n],或是(m, n)。

    (a,b) (rand()%(b-a+1))+a-1
    [a,b) (rand()%(b-a))+a
    (a,b] (rand()%(b-a))+a+1
    [a,b] (rand()%(b-a+1))+a
    

    注意,以上三个程序每次执行产生的结果是相同的,即是个伪随机数。rand()产生随机数与具体的种子有关,当不用srand()获取种子时,种子的默认值为1,因此需要用srand()函数产生不同的种子,种子的值可以人为设定。若是为了产生不同的种子值,通常用时间作为参数值。

    srand()

    srand()函数原型:void srand(unsigned seed)

    #include <iostream>
    using namespace std;
    int main()
    {
        cout<<rand()<<endl;//default = 1, which is the same with below
        srand(1);
        cout<<rand()<<endl;
        srand(23);
        cout<<rand()<<endl;
        srand((int)time(NULL));
        cout<<rand()<<endl;
        cout<<rand()/double(RAND_MAX)<<endl;
        return 0;
    }
    
    运行结果:
    16807
    16807
    386561
    679799174
    0.359358
    [Finished in 0.3s]
    

    相关文章

      网友评论

          本文标题:c/c++生成随机数

          本文链接:https://www.haomeiwen.com/subject/sgqsyxtx.html