C++产生随机数实现方法.doc

上传人:hs****ma 文档编号:546057720 上传时间:2023-12-10 格式:DOC 页数:8 大小:91.01KB
返回 下载 相关 举报
C++产生随机数实现方法.doc_第1页
第1页 / 共8页
C++产生随机数实现方法.doc_第2页
第2页 / 共8页
C++产生随机数实现方法.doc_第3页
第3页 / 共8页
C++产生随机数实现方法.doc_第4页
第4页 / 共8页
C++产生随机数实现方法.doc_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《C++产生随机数实现方法.doc》由会员分享,可在线阅读,更多相关《C++产生随机数实现方法.doc(8页珍藏版)》请在金锄头文库上搜索。

1、 C+产生随机数具体实现方法详解 http:/ 2010-02-01 17:02 佚名 博客园 我要评论(0) C+产生随机数的实现通常都是使用C+编程语言中的rand()函数来生成随机数。不过在实际操作中还需要我们注意一些使用技巧的应用。C+编程语言的应用,可以轻松的帮助开发人员实现各种功能需求,比如随机数的生成等等。那么在这里我们就会给大家详细介绍一下有关C+产生随机数的具体方法,希望大家可以对此有一个详细的了解。C+中常用rand()函数生成随机数,但严格意义上来讲生成的只是伪随机数(pseudo-random integral number)。生成随机数时需要我们指定一个种子,如果在程

2、序内循环,那么下一次生成随机数时调用上一次的结果作为种子。但如果分两次执行程序,那么由于种子相同,生成的“随机数”也是相同的。在工程应用时,我们一般将系统当前时间(Unix时间)作为种子,这样C+产生随机数更接近于实际意义上的随机数。给一下例程如下:1. #include2. #include3. #include4. usingnamespacestd; 5. intmain() 6. 7. doublerandom(double,double); 8. srand(unsigned(time(0); 9. for(inticnt=0;icnt!=10;+icnt) 10. coutNo.i

3、cnt+1:int(random(0,10)endl; 11. return0; 12. 13. doublerandom(doublestart,doubleend) 14. 15. returnstart+(end-start)*rand()/(RAND_MAX+1.0); 16. 17. /*运行结果 18. *No.1:3 19. *No.2:9 20. *No.3:0 21. *No.4:9 22. *No.5:5 23. *No.6:6 24. *No.7:9 25. *No.8:2 26. *No.9:9 27. *No.10:6 28. */利用这种C+产生随机数的方法能不能得

4、到完全意义上的随机数呢?似乎9有点多哦?却没有1,4,7?!我们来做一个概率实验,生成1000万个随机数,看0-9这10个数出现的频率是不是大致相同的。程序如下:29. #include30. #include31. #include32. #include33. usingnamespacestd; 34. intmain() 35. 36. doublerandom(double,double); 37. inta10=0; 38. constintGen_max=10000000; 39. srand(unsigned(time(0); 40. for(inticnt=0;icnt!=G

5、en_max;+icnt) 41. switch(int(random(0,10) 42. 43. case0:a0+;break; 44. case1:a1+;break; 45. case2:a2+;break; 46. case3:a3+;break; 47. case4:a4+;break; 48. case5:a5+;break; 49. case6:a6+;break; 50. case7:a7+;break; 51. case8:a8+;break; 52. case9:a9+;break; 53. default:cerrError!endl;exit(-1); 54. 55.

6、 for(inticnt=0;icnt!=10;+icnt) 56. couticnt:setw(6)setiosflags(ios:fixed)setprecision(2)double(aicnt)/Gen_max*100%对“推广广告”提建议 如何将一个单链表按逆序链接在Visual C+中怎样获取随机数学习C+ 2007-10-27 17:22:58 阅读167 评论0 字号:大中小订阅 所属类别:C/C+ - 其他方面Microsoft Visual C+5.0 windows 98 请问,在Visual C+中怎样获取随机数?不知如何获取指定范围内的随机数?(即实现Turbo C中

7、random函数的功能)(李明洋) 使用rand函数获得随机数。rand函数返回的随机数在0-RAND_MAX(32767)之间。 例子: /* RAND.C: This program seeds the random-number generator * with the time, then displays 10 random integers. */ #include #include #include void main( void ) int i; /* Seed the random-number generator with current time so that * th

8、e numbers will be different every time we run. */ srand( (unsigned)time( NULL ) ); /* Display 10 numbers. */ for( i = 0; i 10;i+ ) printf( %6dn, rand() ); 在调用这个函数前,最好先调用srand函数,如srand( (unsigned)time( NULL ) ),这样可以每次产生的随机数序列不同。详见QA002136 rand()每次产生的随机数都一样。 如果要实现类似0-1之间的函数,可以如下: double randf() return

9、 (double)(rand()/(double)RAND_MAX); 如果要实现类似Turbo C的random函数,可以如下: int random(int number) return (int)(number/(float)RAND_MAX * rand(); 使用random_shuffle()算法随机化序列元素 假设你需要指定范围内的随机数,传统的方法是使用ANSI C的函数random(),然后格式化结果以便结果是落在指定的范围内。但是,使用这个方法至少有两个缺点。首先,做格式化时,结果常常是扭曲的,所以得不到正确的随机数(如某些数的出现频率要高于其它数) 。其次,random(

10、)只支持整型数;不能用它来产生随机字符,浮点数,字符串或数据库中的记录。对于以上的两个问题,C+中提供了更好的解决方法,那就是random_shuffle()算法。不要着急,下面我就会告诉你如何用这种算法来产生不同类型的随机数。产生指定范围内的随机元素集的最佳方法是创建一个顺序序列(也就是向量或者内置数组),在这个顺序序列中含有指定范围的所有值。例如,如何你需要产生100个0-99之间的数,那么就创建一个向量并用100个按升序排列的数填充向量: #include using std:vector;int main() vector vi; for (int i = 0; i 10; i+) vi.push_back(i);/*现在向量包含了 100 个 0-99 之间的整数并且按升序排列*/填充完向量之后,用random_shuffle()算法打乱元素排列顺序。random_shuffle(

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号