目标
产生一个介于[a, b]的随机整数。
工具
rand()
1 |
|
rand()函数用于产生一个随机数,数值介于[seed, RAND_MAX]之间。其中,seed由srand()来提供,而RAND_MAX为定义在头文件“cstdlib”中的一个常量,其数值为0x7fff = 32767。
srand()
1 | srand(seed); // 调用格式 |
srand()函数为rand()提供seed,在使用时放置于rand()前。如果srand()提供的seed可以动态变化,那么rand()生成的随机数也会动态变化,否则多次编译时,rand()会一直返回一个相同的随机数。实际中常常使用time()函数来实现这个动态变化。要注意的是,在循环产生随机数时,应该将srand()语句放在循环体外,否则由于循环语句执行很快可能导致time()值未刷新,无法实现动态变化的要求。
time()
1 |
|
time()函数返回从1970/1/1,00:00:00到当前系统时间所差的秒钟数。显然这个数字是不断变化的。但是仍要注意,如果在多次编译中要求随机数种子seed变化的时间小于1s则不能使用此法。
实现
1.记得在头文件中包含“cstdlib”和“ctime”两个文件。
2.调用srand(),以time()返回值作为参数。这里注意time()的返回值其实时一个time_t型数据,而time_t为长整型。我们可以通过显式强制类型转换将其转化为所需要的数据类型。
3.调用rand()生成一个随机整数。
4.根据要求对得到的整数进行处理。比如要得到某个区间中的随机数,就将得到的大数x在指定区间上进行分配,算法为:“x % 区间长度 + 区间左端点”。还可以利用得到的大数来实现随机浮点数。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
using namespace std;
int random(int a, int b){
srand((unsigned int)time(0));
if(a > b){
int tmp = a;
a = b;
b = tmp;
}
return rand() % (b-a+1) + a;
}
int main(int argc, char const *argv[])
{
int a, b;
cin >> a >> b;
cout << random(a, b);
return 0;
}
转载请注明来源:©Tinshine