打卡 ngchiuyuen 发表于 2019-11-6 23:08
为什么srand((unsigned)time(&t));放到for循环里面,生成的随机数是一样的?放到外面就不一样?
for 循环运行速度非常快,在一秒之内就运行完成了,而 time() 函数得到的时间只能精确到秒,所以每次循环得到的时间都是一样的,这样一来,种子也就是一样的,随机数也就一样了 好 111 ngchiuyuen 发表于 2019-11-6 23:08
为什么srand((unsigned)time(&t));放到for循环里面,生成的随机数是一样的?放到外面就不一样?
可能是因为种子只设置了一遍吧 易烊千玺女友 发表于 2020-4-26 21:41
#include
#include
#include
因为种子只设置了一遍吧
改:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define A 10
int main()
{
int i;
time_t t;
for(i=1;i<A;i++)
{
srand((unsigned)time(&t));
printf("%d\n",rand()%1000);
}
system("pause");
return 0;
} {:10_330:} 想要生成的随机数不重复该怎么做呢{:10_272:} 长知识呢 感觉rand()这个函数在播种以后连续调用的话,第一次输出序列中第一个值,第二次输出序列中第二个值,这样依次下去,所以在for循环外可以得到不同的随机值;但在for循环里的话相当于连续播种了同一个种子(因为for循环速度太快不到一秒)这样每次只能输出序列的第一个值,所以结果当然是几个同样的值。{:10_257:} 朕已阅 ngchiuyuen 发表于 2019-11-6 23:08
为什么srand((unsigned)time(&t));放到for循环里面,生成的随机数是一样的?放到外面就不一样?
这个我也没明白。。。 而使用相同的种子序列调用 range 函数会导致生成相同的随机数序列。 time_t也是数据类型吗
还差几 发表于 2017-9-10 10:50
如何将取值范围调道0~9
%10 学习 本帖最后由 铭凡 于 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,没看仔细
@小甲鱼 学到了{:10_245:}
页:
1
[2]