标题:关于随机数,有个地方不明白。
只看楼主
ilsoviet1917
Rank: 2
等 级:论坛游民
帖 子:103
专家分:26
注 册:2010-5-11
结帖率:84.21%
已结贴  问题点数:20 回复次数:10 
关于随机数,有个地方不明白。
程序代码:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main (void)
{
    int i;
    time_t t;
   

    srand((unsigned int) time (&t));
   

    for (i = 0; i < 10; i++)
    {
        printf ("%d\n", rand() % 10);
    }
   

    return 0;
}           


怎么才能让产生的十个随机数没有重复的数字呢?只是0-9出现的位置不同。还有 srand((unsigned int) time (&t));这句话什么意思?注销了好像也没有什么影响。
搜索更多相关主题的帖子: 随机数 include time int unsigned 
2018-01-12 22:00
Jonny0201
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:52
帖 子:488
专家分:2603
注 册:2016-11-7
得分:0 
程序代码:
#include <stdio.h>
#include <ctime>
int main() {
    srand((unsigned)time(NULL));    //随机数发生器初始化,没有这句产生的随机数是一样的
    for(int i = 0; i < 10; i++) {
        printf("%d\n", rand() % 10);
    }
}

不知道设计者当初怎么想的,反正我目前觉得,C 产生随机数这里是最不爽的,rand() 只能算是伪随机

[此贴子已经被作者于2018-1-12 22:07编辑过]

2018-01-12 22:03
ilsoviet1917
Rank: 2
等 级:论坛游民
帖 子:103
专家分:26
注 册:2010-5-11
得分:0 
回复 2楼 Jonny0201
编译有错误
少了个#include <stdlib.h>
而且结果和我的一样


[此贴子已经被作者于2018-1-12 22:09编辑过]

2018-01-12 22:08
Jonny0201
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:52
帖 子:488
专家分:2603
注 册:2016-11-7
得分:0 
回复 3楼 ilsoviet1917
#include <ctime> 改为 #include <time.h>
习惯了,写的时候都没注意
2018-01-12 22:09
Jonny0201
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:52
帖 子:488
专家分:2603
注 册:2016-11-7
得分:0 
回复 3楼 ilsoviet1917
如果还是不行的话,可以尝试改成 srand((unsigned)time(NULL) + rand()) 试一下
2018-01-12 22:11
ilsoviet1917
Rank: 2
等 级:论坛游民
帖 子:103
专家分:26
注 册:2010-5-11
得分:0 
回复 5楼 Jonny0201
还是不行,而且后面 +rand()是啥意思?
2018-01-12 22:14
Jonny0201
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:52
帖 子:488
专家分:2603
注 册:2016-11-7
得分:0 
回复 6楼 ilsoviet1917
不行具体是什么情况,一直产生一个数字是吗?
你说的产生 0 - 9 不同的,是不是指,10 次里这些数字每个只能产生一次?
2018-01-12 22:55
Jonny0201
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:52
帖 子:488
专家分:2603
注 册:2016-11-7
得分:0 
如果是 10 次里每次产生的数字都不一样,我的处理是已经产生的放在数组里面,每次产生之前去数组里看一下是否已经产生过,如果产生过了就重新生成,直到生成一个没有产生过的为止
2018-01-12 22:56
ilsoviet1917
Rank: 2
等 级:论坛游民
帖 子:103
专家分:26
注 册:2010-5-11
得分:0 
回复 8楼 Jonny0201
就是这个意思,具体怎么实现呢?
2018-01-13 02:06
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:20 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
main()
{
    srand((unsigned)time(NULL));
    int a[10]={0,1,2,3,4,5,6,7,8,9}, n, i;
    for (n=10; n>1; --n)
    {
        i = rand()%n;
        printf("%d\n", a[i]);
        memmove(&a[i], &a[i+1], (n-i-1)*sizeof(int));
    }
    printf("%d\n", a[0]);
}
2018-01-13 07:00



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-484204-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.963962 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved