C++中随机数的问题,如何在短时间内产生不一样的随机数?

cosperypf 2009-11-22 05:29:43
我在网上查到的随机数字生成方法为
srand((unsigned)time(NULL));
cout<<rand() % 30<<endl;

所以我写了下面这个很简单的例子,要系统输出10个范围在0至30之间的数字,那么有以下代码
#include <iostream>
#include<time.h> //头文件
using namespace std;
void main()
{
for (int i=0;i<10;i++)
{
srand((unsigned)time(NULL));//使用系统时间初试化随机种子。
cout<<rand() % 30<<endl;//产生0-30之间的随机数
}
system("pause");
}

程序的输出结果是输出了10个完全相同的数字,可是我想要的是不同的数字啊
我可以理解这是使用了时间函数,在相同的时间下产生的数字是相同的,但是有什么方法可以实现我本来的想法吗?即让系统马上产生10个范围0至30之间的随机数?
...全文
1611 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
jialongtao 2009-12-06
  • 打赏
  • 举报
回复
这样产生的随机数是不是符合要求的。
N=512000.
在0-511999之间随机选择一个整数。
int i=int ((double)rand()/(RAND_MAX+1.0)*N);
cattycat 2009-11-22
  • 打赏
  • 举报
回复 1
srand放到循环外面,另外这样也不能保证10个数都不重复。
cosperypf 2009-11-22
  • 打赏
  • 举报
回复
明白了明白了,谢谢各位
jackyjkchen 2009-11-22
  • 打赏
  • 举报
回复
srand不要用循环
stardust20 2009-11-22
  • 打赏
  • 举报
回复
#include <iostream> 
#include <time.h> //头文件
using namespace std;
void main()
{
srand((unsigned)time(NULL));//使用系统时间初试化随机种子。//移到外面
for (int i=0;i <10;i++)
{

cout <<rand() % 30 <<endl;//产生0-30之间的随机数
}
system("pause");
}

beginnow 2009-11-22
  • 打赏
  • 举报
回复 1
srand只要在开始的时候调用一次足矣
delphiwcdj 2009-11-22
  • 打赏
  • 举报
回复
自己写一个mod算法,将其与time一起作为种子
liao05050075 2009-11-22
  • 打赏
  • 举报
回复 1
for (int i=0;i <10;i++)
{
srand((unsigned)time(NULL));//使用系统时间初试化随机种子。
cout < <rand() % 30 < <endl;//产生0-30之间的随机数
}
在极短的时间内,time()所得到的数字是一样的,所以srand初始化之后,用rand()来产生的数字自然也是一样的。
在这里,你只要srand一次就可以了。也就是把srand放到for外面

64,439

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧