1.随机数
随机数:在某次产生过程中按照实验过程中表现的分布概率随机产生的,其结果是不可预测的,是不可见的。一般使用的是伪随机的。
2.一般随机数生成
常使用函数rand()产生随机数,但是随机数值的范围在0至RAND_MAX 间,RAND_MAX与使用数据类型有关。
int randNum = 10;
for (int i = 0; i < randNum; i++) { cout << rand() << " "; }
产生结果:41 18467 6334 26500 19169 15724 11478 29358 26962 24464。
3.一定范围的随机数
一般情况下,随机数产生的范围是RAND_MIN至RAND_MAX之间。通用格式是为:
(1)[a,b)间随机整数:rand() % (b-a)+ a;
(2)[a,b]间随机整数:rand() % (b-a+1)+ a;
(3)(a,b]间随机整数:rand() % (b-a)+ a + 1;
不同类型的随机数使用相应数据类型进行转换。
int randNum = 10;
for (int i = 0; i < randNum; i++) { cout << (rand()%(10-1+1))+1 << " "; }
产生结果:2 8 5 1 10 5 9 9 3 5。
可以发现,[1,10]之间产生的随机数是有重复。不重复,该如何?
4.不重复的随机数
例:在[1,20]中产生5个不重复的随机数
#include<iostream>
#include<time.h>
#include<stdlib.h>
using namespace std;
int main() {
srand((unsigned)time(0));
int randNum = 20;//随机数的个数
int num = 5;//需要的随机数个数
int randMin = 1;//最小数值范围
int randMax = 20;//最大数值范围
int a[20];
for (int i = 0; i < randNum; ++i) a[i] = i+1;//将数值范围中的整数存放于数组
for (int j = randNum-1; j >= 1; --j) swap(a[j], a[rand() % j]);//随机产生索引脚标的数值与数组值进行交换
for (int i = 0; i < 5; ++i) { cout << a[i] << " "; }
system("pause");
return 0;
}
产生结果:9 19 10 6 2。
产生固定范围的不重复随机数方法较多,还需耐心学习!