鱼C论坛

 找回密码
 立即注册
楼主: 小甲鱼

[函数快查] rand -- 伪随机数生成器

[复制链接]
发表于 2020-8-8 16:34:16 | 显示全部楼层
ngchiuyuen 发表于 2019-11-6 23:08
为什么srand((unsigned)time(&t));放到for循环里面,生成的随机数是一样的?放到外面就不一样?

为啥啊?没懂啊!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-6 15:57:45 | 显示全部楼层
我明白了!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-5 15:04:10 | 显示全部楼层
C语言的库,噩梦啊


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-6 23:03:23 | 显示全部楼层
打卡
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-10-7 11:04:36 | 显示全部楼层
ngchiuyuen 发表于 2019-11-6 23:08
为什么srand((unsigned)time(&t));放到for循环里面,生成的随机数是一样的?放到外面就不一样?

for 循环运行速度非常快,在一秒之内就运行完成了,而 time() 函数得到的时间只能精确到秒,所以每次循环得到的时间都是一样的,这样一来,种子也就是一样的,随机数也就一样了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-19 11:49:07 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-1-15 18:57:29 | 显示全部楼层
111
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-1-17 22:00:45 | 显示全部楼层
ngchiuyuen 发表于 2019-11-6 23:08
为什么srand((unsigned)time(&t));放到for循环里面,生成的随机数是一样的?放到外面就不一样?

可能是因为种子只设置了一遍吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-17 22:02:54 | 显示全部楼层

因为种子只设置了一遍吧
改:

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<time.h>

  4. #define A 10

  5. int main()
  6. {
  7.         int i;
  8.         time_t t;
  9.       
  10.         
  11.       
  12.         for(i=1;i<A;i++)
  13.         {
  14.                 srand((unsigned)time(&t));
  15.                 printf("%d\n",rand()%1000);
  16.         }
  17.         system("pause");
  18.         return 0;
  19. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-14 13:52:13 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-3-15 12:47:58 | 显示全部楼层
想要生成的随机数不重复该怎么做呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-23 10:50:08 | 显示全部楼层
长知识呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-4-2 15:50:19 | 显示全部楼层
感觉rand()这个函数在播种以后连续调用的话,第一次输出序列中第一个值,第二次输出序列中第二个值,这样依次下去,所以在for循环外可以得到不同的随机值;但在for循环里的话相当于连续播种了同一个种子(因为for循环速度太快不到一秒)这样每次只能输出序列的第一个值,所以结果当然是几个同样的值。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-6-10 15:23:48 | 显示全部楼层
朕已阅
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-6-13 20:49:00 | 显示全部楼层
ngchiuyuen 发表于 2019-11-6 23:08
为什么srand((unsigned)time(&t));放到for循环里面,生成的随机数是一样的?放到外面就不一样?

这个我也没明白。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-6-13 21:05:08 | 显示全部楼层
而使用相同的种子序列调用 range 函数会导致生成相同的随机数序列。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-7-21 14:53:19 | 显示全部楼层
time_t也是数据类型吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-7-30 15:41:33 | 显示全部楼层
还差几 发表于 2017-9-10 10:50
如何将取值范围调道0~9

%10
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-9 16:22:20 | 显示全部楼层
学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-12-6 01:43:29 | 显示全部楼层
本帖最后由 铭凡 于 2022-12-6 15:02 编辑

提问:我要做一个摇骰子的程序,然后将答案累加,数据范围是0~23,也就是说,如果达到24就变成0,25变成1

使用这个函数,i =range()%5, i++

这样相当于i随机取1~6(原来是0~5)

但是累加结果无论我程序运行几次,都是几个重复的数

6 6 5
11 12 10
12 13 15
15 19 21
17 23 23
23 1 2
3 2 6
4 5 10......

怎么办?有人可以帮帮我吗?

已解决,我没用srange,没看仔细

@小甲鱼
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-25 06:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表