解决srand()与rand()每次运行结果一样的问题
来源:互联网 发布:利基通讯淘宝店可靠吗 编辑:程序博客网 时间:2024/05/18 20:09
做了一个猜数字的游戏,用srand()与rand()对随机数进行初始化,可以每次的运行结果都一样.
Eg.
#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
int number;
srand(0)
for(int i=0;i<=9;i++)
{
number=rand();
cout<<number;
}
return 1;
}
每次运行的值都是一样的.
函数一:int rand(void);
从srand (seed)中指定的seed开始,返回一个[seed, RAND_MAX(0x7fff))间的随机整数。
函数二:void srand(unsigned seed);
参数seed是rand()的种子,用来初始化rand()的起始值。
可以认为rand()在每次被调用的时候,它会查看:
1) 如果用户在此之前调用过srand(seed),给seed指定了一个值,那么它会自动调用
srand(seed)一次来初始化它的起始值。
2) 如果用户在此之前没有调用过srand(seed),它会自动调用srand(1)一次。
根据上面的第一点我们可以得出:
1) 如果希望rand()在每次程序运行时产生的值都不一样,必须给srand(seed)中的seed一个变值,这个变值必须在每次程序运行时都不一样。
2) 否则,如果给seed指定的是一个定值,那么每次程序运行时rand()产生的值都会一样,虽然这个值会是[seed, RAND_MAX(0x7fff))之间的一个随机取得的值。
3) 如果在调用rand()之前没有调用过srand(seed),效果将和调用了srand(1)再调用rand()一样(1也是一个定值)。
那样的话,如上面的程序,它就一直是相同的结果,那里我们调用了rand()函数10次,每次生成的数都不一样,但把程序再运行一遍,产生的序列跟上次一样,这就是“伪随机”的含义:种子不变,随机数其实是固定的。 要想让计算机生成一些不固定的,真正随机的东西,就只有靠取系统时间了。下面这个程序用时间设随机数种子,可以得到真正的随机
Eg.
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int main()
{
int number;
srand((unsigned)time(NULL)) // 这个方法是告诉rand方法以time为种子去生成随机数!
for(int i=0;i<=9;i++)
{
number=rand();
cout<<number;
}
return 1;
}
- 解决srand()与rand()每次运行结果一样的问题
- rand()与srand()的用法
- rand()每次产生的随机数都一样
- 关于srand()函数与rand()函数的问题
- 随机数 rand()与srand()的区别
- c++rand()与srand()的使用
- rand与srand:随机数的生成
- rand()与srand()函数的使用
- rand()与srand()用法
- 函数rand()与srand()
- rand()与srand()
- rand()与srand()
- srand与rand
- rand() 与srand() 函数
- 随机数(rand与srand)
- rand 与srand 关系
- WEEK8晚第一题(升级版哦,每次运行都可以出现不同学号哦,耶!用srand(time(0))解决,不被rand()局限)
- rand()为啥每次生成的数都是一样的
- 转 YB's Space 264解码主函数架构
- 0713
- hibernate痛苦的初体验
- mysql 各种时间段查询
- itoa和atoi函数
- 解决srand()与rand()每次运行结果一样的问题
- Windows必须掌握的快捷键,你都会了吗?
- 暑期java基础巩固训练营正式发布
- java基础巩固训练营 简介
- java基础巩固训练营【第一轮】(一)项目环境和规范
- java基础巩固训练营【第一轮】(一)项目环境和规范 补充
- java基础巩固训练营【第一轮】(二)JAVA基础
- java基础巩固训练营【第一轮】((二)JAVA基础 补充
- 如何写一篇好的技术文档