C++中生成随机数常用这两个函数:
rand()和srand()
rand()函数,生成一个范围在[0,RAND_MAX]的随机数,RAND_MAX的值为32767
其中RAND_MAX定义在cstdlib头文件中。
#include <iostream>
using namespace std;
#include <cstdlib>int main() {cout << RAND_MAX << endl;cout << rand() << endl;;return 0;
}
注意:rand()函数生成的是伪随机数,故每次执行的结果是相同的。
我们可以用srand((unsigned)time(NULL))的方法产生不同的随机种子,需要头文件ctime。
#include <iostream>
using namespace std;
#include <ctime>
#include <cstdlib>int main() {srand((unsigned)time(NULL));cout << RAND_MAX << endl;cout << rand() << endl;;return 0;
}
产生指定范围内的随机数:
可以先使用rand()函数产生一个[0,RAND_MAX]范围内的随机数,然后在变换到指定范围内。
产生[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);
例子
产生500个[0,1]的随机数:
#include <iostream>
using namespace std;
#include <cstdlib>
#include <ctime>int main() {srand((unsigned)time(NULL));for (int i = 1; i <= 500; i++)cout << rand()%2 << endl;return 0;
}