[C++] 随机数之初见
来源:互联网 发布:淘宝改了名称搜不到 编辑:程序博客网 时间:2024/05/16 08:51
进出csdn这个门户已久,从很多大牛那里学到不少的东西,今天决定开始写自己的技术博客,一来可以和别人分享自己的小经验,结交朋友;二来也可以记录自己成长的点点滴滴,让自己的成长看得见,便于回顾自己的成长历程。
今天要写的随机数的问题,自己也一直纳闷:计算机是一个非常严格的东西,有确定的输入一定会产生确定的输出,怎么会出现随机数呢? 明白随机数的产生机理后,才明白随机数也是采用一种算法(才用的算法之一是线性同余法)得出来的,只不过得到的结果没有“明显”的规律,所以才这些结果去模拟随机数。
这里主要介绍用rand()函数和srand()的配合使用生产随机数的方法。
一、rand()是C++中生成“随机数”的函数,生成“随机数”时需要一个种子,即初始值,系统用初始值利用递推公式算出一个随机数,默认的种子是1,用for循环生成十个随机数的C++代码如下:
#include <iostream>using namespace std;int main(){for(int i = 0; i != 10; ++i)cout << rand()<< endl; //输出随机数return 0;}
得到的十个随机数如图所示,貌似很合理,但是当重复执行该程序时,每次得到的结果都是一样的,这样的“随机数”显得很不合理!原因就是系统每次给的都是默认的种子1,确定的输入必然会得到确定的输出,这一点从计算机严格执行命令的特点来说又是合理的!如何每次都得到不同的种子呢,人们想到了利用系统时间初始化种子,这时就要用到srand()函数。
二、srand()函数是初始化rand()种子的函数,即每次执行rand()函数时不再拥有同样的种子,这里可用系统时间作为srand()函数的参数,srand((unsigned)time(NULL)); 例子代码如下:
#include <iostream>#include <ctime>using namespace std;int main(){srand((unsigned)time(NULL));for(int i = 0; i != 10; ++i)cout << rand() % 100 << endl; //输出随机数,用100取余是只想得到[0, 100)的随机数return 0;}
这个运行两次程序后产生的随机数,这样看着更随机!
产生的随机数的范围可用这个通式进行限定:
srand((unsigned)time(NULL));
rand()%(b - a) + a; //产生[a,b)这个范围的随机数,常见到的a是0的情况。
本文参考的文章:浅墨_毛星云点击打开链接 杨中科点击打开链接
- [C++] 随机数之初见
- Objective-C之初见
- objective-c(五)-面向对象之初见
- C#---初见
- C语言之随机数产生
- C小加 之 随机数
- c函数之【随机数函数】
- C小加 之 随机数
- C小加 之 随机数
- C小加 之 随机数
- C小加 之 随机数
- C小加 之 随机数
- C小加 之 随机数
- C小加 之 随机数
- C小加 之 随机数
- C小加 之 随机数
- C小加 之 随机数
- C语言之随机数生成
- 【一个灰度化的demo 】OpenCV2.4.9 For Android + Android Studio (with gradle)
- linux-磁盘分区
- 改变结构体的值
- Uva 437-The Tower of Babylon(DP)
- 截屏(带鼠标)
- [C++] 随机数之初见
- UVA - 156 Ananagrams
- hdu 4893 欧拉函数
- 记一个小软件的开发
- C----------------LessonArray
- Topcoder SRM642 TaroCutting
- PHP设置页面字符集utf8
- iOS完整学习路线图
- hdu2167Pebbles dp+状态压缩水题