[C.C++] C++产生随机数

323 0
Honkers 2025-5-10 21:36:40 | 显示全部楼层 |阅读模式

C++产生随机数

rand()

C++中没有自带的random函数,要实现随机数的生成就需要使用rand()和srand()。
不过,由于rand()的内部实现是用线性同余法做的,所以生成的并不是真正的随机数,而是在一定范围内可看为随机的伪随机数。

  1. #include <iostream>
  2. using namespace std;
  3. int main() {
  4. //产生5个范围在[0,10)的随机数
  5. for ( int i=0;i<5;i++)
  6. {
  7. cout << rand()%10 << " ";
  8. }
  9. system("pause");
  10. return 0;
  11. }
复制代码

两次运行结果为:

srand()

srand()可用来设置rand()产生随机数时的随机数种子。通过设置不同的种子,我们可以获取不同的随机数序列。
可以利用srand((unsigned)time(NULL))的方法,利用系统时钟,产生不同的随机数种子。不过要调用time(),需要加入头文件< ctime >。

  1. #include <iostream>
  2. #include <ctime>
  3. using namespace std;
  4. int main() {
  5. srand((unsigned)time(NULL));//产生随机数种子
  6. for ( int i=0;i<5;i++)
  7. {
  8. cout << rand()%10 << " ";
  9. }
  10. system("pause");
  11. return 0;
  12. }
复制代码

两次运行结果如下:


其它的随机数的范围通式

要取[0,n) 就是rand()%n 表示 从0到n-1的整数;
要取[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-a) * rand() /double (RAND_MAX + 1));
要取0~1之间的浮点数,可以使用rand() / double(RAND_MAX);
要取-1~1之间的浮点数,可以使用:int a=rand%2+1;double b=pow(-1,a)*rand()/double(RAND_MAX);

C++ 11新特性

C++11提供的实现了随机数库,它通过随机数引擎(random_number_engines)产生随机数序列,随机数分布类(random_number_distribution)使用随机数引擎生成服从特定概率分布的随机数。
下面举一个例子:

  1. #include <iostream>
  2. #include <random>
  3. using namespace std;
  4. int main() {
  5. uniform_int_distribution<unsigned> u(0, 9);//随机数分布类,范围为[0,9]的整数
  6. default_random_engine e;//默认的随机数引擎
  7. cout << e.min() << " " << e.max() << endl;//随机数引擎可取的最小值和最大值
  8. for ( int i=0;i<5;i++)
  9. {
  10. cout << u(e) << " ";
  11. }
  12. system("pause");
  13. return 0;
  14. }
复制代码

运行结果如下:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Honkers

荣誉红客

关注
  • 4012
    主题
  • 36
    粉丝
  • 0
    关注
这家伙很懒,什么都没留下!

中国红客联盟公众号

联系站长QQ:5520533

admin@chnhonker.com
Copyright © 2001-2025 Discuz Team. Powered by Discuz! X3.5 ( 粤ICP备13060014号 )|天天打卡 本站已运行