C++ 生成随机数

Rand函数

单纯的rand()会返回一个0至RAND_MAX之间的随机数值,而RAND_MAX的值与int位数有关,最小是32767。不过rand()是一次性的,因为系统默认的随机数种子为1,只要随机数种子不变,其生成的随机数序列就不会改变。

srand函数

srand()可用来设置rand()产生随机数时的随机数种子。通过设置不同的种子,我们可以获取不同的随机数序列。可以利用srand((unsigned int)(time(NULL))的方法,利用系统时钟,产生不同的随机数种子。

示例:

 1 #include "stdafx.h"
 2 #include <iostream>
 3 #include <stdlib.h>
 4 #include <time.h>
 5 
 6 #define random(x,y) (((double)rand()/RAND_MAX)*(y-x+1)+x)
 7 
 8 using namespace std;
 9 
10 int _tmain(int argc, _TCHAR* argv[])
11 {
12     srand((int)time(NULL));
13 
14     for (int i = 0; i < 200; i++)
15     {
16         cout << "num :   " << (int)random(0, 10) << endl;
17     }
18 
19     getchar();
20     return 0;
21 }

随机数获取范围的方法 

(double)rand()/RAND_MAX)*(y-x+1)+x)

(0,x)的随机整数:rand()%x 或者 (double)rand()/RAND_MAX)*(x)

(a,b)的随机整数:rand()%(b-a) 或者 (double)rand()/RAND_MAX)*(b-a-1)+a+1

[a,b)的随机整数:rand()%(b-a)+a 或者 (double)rand()/RAND_MAX)*(b-a)+a

[a,b]的随机整数:rand()%(b-a+1)+a 或者 (double)rand()/RAND_MAX)*(b-a+1)+a

(a,b]的随机整数:rand()%(b-a)+a+1 或者 (double)rand()/RAND_MAX)*(b-a)+a+1

0-1之间的浮点数:rand()/double(RAND_MAX)。

猜你喜欢

转载自www.cnblogs.com/tyche116/p/9400454.html