1.一种奇异的方法
直接利用函数中定义数组变量不赋值自动随机赋值的特性来写。
#include <iostream>
using namespace std;
int main()
{
int a[1],n; cin>>n;
a[0]%=n; //n为范围,最多随机到n-1
cout<<a[0]<<endl;
return 0;
}
但是这有个缺陷,输入同样范围回答一样。
2.rand(void)与srand(unsigned)
srand(unsigned)中unsigned填起始随机范围不填就是1;
rand(void)void不填后面%(n+1)(n是最大随机到的数)。
没有%范围就没有,所以会获得任何数字结果。
(需调用cstdlib库)
好,我们试一下:
#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
srand(0);
int n; cin>>n;//n为范围,最多随机到n
cout<<rand()%(n+1)<<endl;
return 0;
}
回答都是一个数字!!!
所以需要调用熟悉的ctime库利用每个时间的不同数字的特性来初始srand。
srand(time(0));
再rand()%(n+1)。
那怎么指定最小随机值呢?有个公式:
最小值+rand()%(最大随机值+1-最小值)
好,再来:
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int main()
{
srand(time(0));
int n1,n2; cin>>n1>>n2;
//n2为最大随机值,最多随机到n2;n1为最小随机值,最小随机到n1
cout<<n1+rand()%(n2+1-n1)<<endl;
return 0;
}
输出:
随机了!!!
这就成功了。
3.random库(c++11开始才有)
1.随机数产生类
default_random_engine 类,其他类需它帮助。
直接使用:
#include <iostream>
#include <ctime>
#include <random>
using namespace std;
//直接使用只能从所有正整数中随机
int main()
{
default_random_engine a;
a.seed(time(0));
cout<<a()<<endl;
return 0;
}
2.随机数范围类(整数)
uniform_int_distribution类。
<>中填整数类数据类型。
#include <iostream>
#include <ctime>
#include <random>
using namespace std;
int main()
{
default_random_engine a;
int c,d; cin>>c>>d; //c最小随机值,d最大随机值
uniform_int_distribution<int> b(c-1,d+1);
// 注意了!!!左闭右闭区间(不包含表示范围的两个数字)
a.seed(time(0));
cout<<b(a)<<endl;
return 0;
}
输出:
3.随机数范围类(实数)a
uniform_real_distribution类。
<>中填实数类数据类型。实数即有小数部分的数,0.1、1000.92就是典型。
#include <iostream>
#include <ctime>
#include <random>
using namespace std;
int main()
{
default_random_engine a;
double c,d; cin>>c>>d; //c最小随机值,b最大随机值
uniform_real_distribution<double> b(c-1,d+1);
//注意左闭右闭区间
a.seed(time(0));
cout <<b(a)<<endl;
return 0;
}
输出:
4.随机数范围类(实数)b
normal_distribution类。
<>中填实数类数据类型。()中第一个填均值,第二个填标准差。
#include <iostream>
#include <ctime>
#include <random>
using namespace std;
int main()
{
default_random_engine a;
double c,d; cin>>c>>d; //均值为c,标准差为d
normal_distribution<double> b(c,d);
a.seed(time(0));
cout<<b(a)<<endl;
return 0;
}
输出:
5.随机布尔值
bernoulli_distribution类。
没有<>,()中填生成1的概率。填百分比,但并不是100%、83%,是它们的数值。如100%是1,83%是0.83。
#include <iostream>
#include <ctime>
#include <random>
using namespace std;
int main()
{
default_random_engine a;
double c; cin>>c; //c是生成1的概率
bernoulli_distribution b(c);
a.seed(time(0));
cout<<b(a)<<endl;
return 0;
}
输出:
--------------------------------------------------------------------------------------------------------------------------------
完