头文件 #include<cmath>
rand()返回一随机数值的范围在0至RAND_MAX 间。RAND_MAX的范围最少是在32767之间(int)。0~RAND_MAX每个数字被选中的机率是相同的。 rand()产生的是伪随机数字,每次执行时是相同的;若要不同,用函数srand()初始化它。C++产生随机数
rand() % 10 + 1; //1-10
rand()产生的随机数在每次运行的时候都是与上一次相同的。若要不同,用函数srand()初始化它。可以利用srand((unsigned int)(time(NULL))的方法,产生不同的随机数种子,因为每一次运行程序的时间是不同的。
要取得[a,b)的随机整数,使用(rand() % (b-a))+ a;
要取得[a,b]的随机整数,使用(rand() % (b-a+1))+ a;
要取得(a,b]的随机整数,使用(rand() % (b-a))+ a + 1;
通用公式:a + rand() % n;其中的a是起始值,n是整数的范围。
要取得a到b之间的随机整数,另一种表示:a + (int)b * rand() / (RAND_MAX + 1)。
要取得0~1之间的浮点数,可以使用rand() / double(RAND_MAX)。
#include<cmath> #include<algorithm> // std::shuffle #include <random> // std::default_random_engine #include <chrono> // std::chrono::system_clock // ------------ 随机函数 ------------ // rand()返回一随机数值的范围在0至RAND_MAX 间。RAND_MAX的范围最少是在32767之间(int)。0~RAND_MAX每个数字被选中的机率是相同的。 // rand()产生的是伪随机数字,每次执行时是相同的;若要不同,用函数srand()初始化它。 cout << rand() << endl; cout << rand() << endl; cout << rand() << endl; cout << endl; // 伪随机数 // 1. 给srand()提供一个种子 srand(time(NULL)); for (size_t i = 0; i < 10; i++) { // 2.调用rand(),它会根据srand()提供的种子值返回一个随机数 int secret = rand() % 10; cout << "secret : " << secret << endl; } cout << endl << endl; // 产生k个不重复的随机数 // 方法1. random.shuffle(lst)[:k] // algorithm.h里面的一个函数 vector<int> arr; int N = 100000, K = 20; for (int i = 0; i < N; ++i) arr.push_back(i + 1); // std::shuffle是从C++11之后才开始出现,必须与随机数生成器一起使用。 // 需要注意的是,std::random_shuffle在 C++14 中弃用, C++17 中移除。所以推荐使用std::shuffle。 // random_shuffle(arr.begin(), arr.end()); unsigned seed = std::chrono::system_clock::now().time_since_epoch().count(); shuffle(arr.begin(), arr.end(), std::default_random_engine(seed)); for (int i = 0; i < K; i++) cout << arr[i] << " "; cout << endl;
标签:std,rand,函数,RAND,int,MAX,随机 From: https://www.cnblogs.com/zijidan/p/16892593.html