c++随机数方法

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;
}

输出:

--------------------------------------------------------------------------------------------------------------------------------

完 

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值