当前位置:   article > 正文

c++随机数方法

c++随机数

1.

直接利用函数中定义数组变量不赋值自动随机赋值的特性来写。 

  1. #include <iostream>
  2. using namespace std;
  3. int main()
  4. {
  5. int a[1],n; cin>>n;
  6. a[0]%=n; //n为范围,最多随机到n-1
  7. cout<<a[0]<<endl;
  8. return 0;
  9. }

但是这有个缺陷,输入同样范围回答一样。

2.rand(void)与srand(unsigned)

srand(unsigned)中unsigned填起始随机范围不填就是1;

rand(void)void不填后面%(n+1)(n是最大随机到的数)。

没有%范围就没有,所以会获得任何数字结果。

(需调用cstdlib库)

好,我们试一下:

  1. #include <iostream>
  2. #include <cstdlib>
  3. using namespace std;
  4. int main()
  5. {
  6. srand(0);
  7. int n; cin>>n;//n为范围,最多随机到n
  8. cout<<rand()%(n+1)<<endl;
  9. return 0;
  10. }

回答都是一个数字!!!

所以需要调用熟悉的ctime库利用每个时间的不同数字的特性来初始srand。

srand(time(0));

再rand()%(n+1)。

那怎么指定最小随机值呢?有个公式:

最小值+rand()%(最大随机值+1-最小值)

好,再来:

  1. #include <iostream>
  2. #include <cstdlib>
  3. #include <ctime>
  4. using namespace std;
  5. int main()
  6. {
  7. srand(time(0));
  8. int n1,n2; cin>>n1>>n2;
  9. //n2为最大随机值,最多随机到n2;n1为最小随机值,最小随机到n1
  10. cout<<n1+rand()%(n2+1-n1)<<endl;
  11. return 0;
  12. }

输出:

随机了!!!

这就成功了。

3.random库(c++11开始才有)

1.随机数产生类

default_random_engine 类,其他类需它帮助。

直接使用:

  1. #include <iostream>
  2. #include <ctime>
  3. #include <random>
  4. using namespace std;
  5. //直接使用只能从所有正整数中随机
  6. int main()
  7. {
  8. default_random_engine a;
  9. a.seed(time(0));
  10. cout<<a()<<endl;
  11. return 0;
  12. }

2.随机数范围类(整数)

uniform_int_distribution类。

<>中填整数类数据类型。

  1. #include <iostream>
  2. #include <ctime>
  3. #include <random>
  4. using namespace std;
  5. int main()
  6. {
  7. default_random_engine a;
  8. int c,d; cin>>c>>d; //c最小随机值,d最大随机值
  9. uniform_int_distribution<int> b(c-1,d+1);
  10. // 注意了!!!左闭右闭区间(不包含表示范围的两个数字)
  11. a.seed(time(0));
  12. cout<<b(a)<<endl;
  13. return 0;
  14. }

输出:

3.随机数范围类(实数)a

uniform_real_distribution类。

<>中填实数类数据类型。实数即有小数部分的数,0.1、1000.92就是典型。

  1. #include <iostream>
  2. #include <ctime>
  3. #include <random>
  4. using namespace std;
  5. int main()
  6. {
  7. default_random_engine a;
  8. double c,d; cin>>c>>d; //c最小随机值,b最大随机值
  9. uniform_real_distribution<double> b(c-1,d+1);
  10. //注意左闭右闭区间
  11. a.seed(time(0));
  12. cout <<b(a)<<endl;
  13. return 0;
  14. }

输出:

 4.随机数范围类(实数)b

normal_distribution类。

<>中填实数类数据类型。()中第一个填均值,第二个填标准差

  1. #include <iostream>
  2. #include <ctime>
  3. #include <random>
  4. using namespace std;
  5. int main()
  6. {
  7. default_random_engine a;
  8. double c,d; cin>>c>>d; //均值为c,标准差为d
  9. normal_distribution<double> b(c,d);
  10. a.seed(time(0));
  11. cout<<b(a)<<endl;
  12. return 0;
  13. }

输出:

 5.随机布尔值

bernoulli_distribution类。

没有<>,()中填生成1的概率。填百分比,但并不是100%、83%,是它们的数值。如100%是1,83%是0.83。

  1. #include <iostream>
  2. #include <ctime>
  3. #include <random>
  4. using namespace std;
  5. int main()
  6. {
  7. default_random_engine a;
  8. double c; cin>>c; //c是生成1的概率
  9. bernoulli_distribution b(c);
  10. a.seed(time(0));
  11. cout<<b(a)<<endl;
  12. return 0;
  13. }

输出:

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

完 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/463070
推荐阅读
相关标签
  

闽ICP备14008679号