c/c++生成随机数

2017-10-07  本文已影响36人  DeepWeaver

rand()

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)

#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]
#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]
上一篇 下一篇

猜你喜欢

热点阅读