一、基础版,适合编程基础较薄弱的人
1、无取值范围的伪随机数的生成,每次生成的数都不变。代码如下:
#include "pch.h"
#include <iostream>
#include<random>
using namespace std;
int main()
{
int a;
for (int i = 0; i < 10; i++)
{
a = rand();
cout << a << endl;
}
}
两次运行结果一样:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICM38FdsYkRGZkRG9lcvx2bjxiNx8VZ6l2cs0TPn5UMRR0T0MGVNBDOsJGcohVYsR2MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnLwEDNyQzNyEjM4ADOwkTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICM38FdsYkRGZkRG9lcvx2bjxiNx8VZ6l2cs0TPn5UMRR0T0MGVNBDOsJGcohVYsR2MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnLwEDNyQzNyEjM4ADOwkTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
2、无取值范围真随机生成方法,利用c++时间库函数,srand(time(0))代表随计算机时间改变的随机种子。代码如下:
#include "pch.h"
#include <iostream>
#include <ctime> // 时间库
using namespace std;
int main()
{
int a;
srand(time(0));
for (int i = 0; i < 10; i++)
{
a = rand();
cout << a << endl;
}
}
两次运行结果不一样:
3、有取值范围真随机生成方法1,利用c++时间库#include <ctime>和随机库函数#include<random>可以生成有范围的随机小数和整数。代码如下:
#include "pch.h"
#include <iostream>
#include <ctime> // 时间库
#include<random>
using namespace std;
int main()
{
srand((unsigned)time(NULL)); //设置时间随机种子
default_random_engine a(rand()); //为【引擎】,生成随机序列
uniform_real_distribution<double> r1(0, 1); //设置随机数小数范围
uniform_int_distribution<unsigned> r2(0, 10000); //设置随机数整数范围
for (int i = 0; i < 10; i++)
{
cout << r1(a) <<"、"<<r2(a)<<endl;
}
}
两次运行结果不一样:
二、进阶版,适合基础较好,对函数模板以及类比较熟悉的人
4、有取值范围真随机生成方法2,利用c++时间库#include <ctime>和随机库函数#include<random>生成有范围的随机小数和整数时看,当我们编写由很多子函数组成的程序时,会发现代码重复率比较高,此时我们就考虑利用函数模板。代码如下:
#include "pch.h"
#include <iostream>
#include <ctime> // 时间库
#include<random>
using namespace std;
template<typename T>
T randT(T Lower, T Upper)//产生任意类型随机数模板函数
{
return rand() / (double)RAND_MAX *(Upper - Lower) + Lower;
};
int main()
{
int d3 = 10, d4 = 10000;
double d1 = 0, d2 = 1.0;
srand((unsigned)time(NULL)); //设置时间随机种子
for (int i = 0; i < 10; i++)
{
cout << randT(d1,d2) <<"、"<< randT(d3, d4) <<endl;
}
}
两次运行结果不一样:
5、有取值范围真随机生成方法2,利用c++时间库#include <ctime>和随机库函数#include<random>生成有范围的随机小数和整数时看,当我们编写由很多子函数组成的程序时,会发现代码重复率比较高,此时我们就考虑利用类。代码如下:
#include "pch.h"
#include <iostream>
#include <ctime> // 时间库
#include<random>
using namespace std;
class RandomNumber {
public:
RandomNumber() {
srand(time(0));//设置时间随机种子
}
int integer(int begin, int end) //定义随机整数函数
{
return rand() % (end - begin + 1) + begin;
}
double decimal(double a, double b) //定义随机小数函数
{
return double(rand() % 10000) / 10000 * (b - a) + a;
}
};
int main()
{
RandomNumber r; //随机数
for (int i = 0; i < 10; i++)
{
cout << r.integer(0,10000) <<"、"<< r.decimal(0, 1) <<endl;
}
}
两次运行结果不一样:
好啦,以上就是随机数生成的几种办法,亲测很好用,如果有什么问题或者需要交流的请发邮箱[email protected]联系我!