C++产生随机数

rand()函数

  单纯的rand()会返回一个0至RAND_MAX之间的随机数值,而RAND_MAX的值与int位数有关,最小是32767。不过rand()是一次性的,因为系统默认的随机数种子为1,只要随机数种子不变,其生成的随机数序列就不会改变。


  其实,对于rand()的范围,我们是可以进行人为设定的,只需要在宏定义中定义一个random(int x)函数,就可以生成范围为0至x的随机数值。当然,也可以定义为random(a,b),使其生成范围为a至b的随机数值。具体定义方法在通式部分。

 

 

srand()函数
 

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

 

示例:

 
  1. #include<iostream>

  2. #include<cstdlib>

  3. #include<ctime>

  4. using namespace std;

  5. int main()

  6. {

  7. srand((unsigned)time(NULL));

  8. for(int i=0;i<10;i++)

  9. cout<<rand()<<' ';

  10. return 0;

  11. }

 

产生一定范围随机数的通用表示公式是:

取得(0,x)的随机整数:rand()%x;
取得(a,b)的随机整数:rand()%(b-a);
取得[a,b)的随机整数:rand()%(b-a)+a;
取得[a,b]的随机整数:rand()%(b-a+1)+a;
取得(a,b]的随机整数:rand()%(b-a)+a+1;
取得0-1之间的浮点数:rand()/double(RAND_MAX)。


要取得[a,b)的随机整数,使用(rand() % (b-a))+ a (结果值含a不含b)。
要取得[a,b]的随机整数,使用(rand() % (b-a+1))+ a (结果值含a和b)。
要取得(a,b]的随机整数,使用(rand() % (b-a))+ a + 1 (结果值不含a含b)。
(总的来说,通用公式:a + rand() % n ;其中的a是起始值,n是整数的范围)
要取得a到b之间的随机整数,另一种表示:a + (int)b * rand() / (RAND_MAX + 1)。
要取得0~1之间的浮点数,可以使用rand() / double(RAND_MAX)。

 

示例:

 
  1. #include<iostream>

  2. #include<cstdlib>

  3. #include<ctime>

  4. #define random(a,b) (rand()%(b-a+1)+a)

  5. using namespace std;

  6. int main()

  7. {

  8. srand((unsigned)time(NULL));

  9. for(int i=0;i<10;i++)

  10. cout<<random(1,100)<<' ';

  11. return 0;

  12. }

 

获取1~10之间的随机数:

 

 
  1. #include <iostream>

  2. #include <cstdlib>

  3. #include <ctime>

  4.  
  5. #define MIN 1

  6. #define MAX 10

  7.  
  8. using namespace std;

  9.  
  10. int main(){

  11. int i;

  12. srand(time(NULL));

  13. cout<<"Ten random numbers from "<<MIN<<

  14. " to "<<MAX<<" :\n";

  15.  
  16. //产生随机数

  17. for(i = 0;i <10;i++)

  18. {

  19. cout<<MIN+rand()%(MAX-MIN+1)<<"\t";

  20. }

  21. cout<<endl;

  22.  
  23. for(int j=0;j<10;j++)

  24. {

  25. cout<<rand()<<"\t";

  26. }

  27. cout<<endl;

  28.  
  29. return 0;

  30. }

 
  1. #define MIN 1

  2. #define MAX 10

  3.  
  4. inline int More() //生成随机数函数

  5. {

  6.  
  7. srand((unsigned)time(NULL)); //初始化随机数种子

  8. int impo=MIN+rand()%(MAX-MIN+1);

  9.  
  10. return impo;

  11.  
  12. }

只需要获取上面函数的返回值就能得到一个1~10范围内的随机数
 

 

--------------------- 本文来自 l198738655 的优快云 博客 ,全文地址请点击:https://blog.youkuaiyun.com/l198738655/article/details/80603883?utm_source=copy

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值