QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

楼主: thinker007

很菜的问题,c怎么产生不重复的随机数!

[复制链接]
发表于 2004-8-2 11:20:33 | 显示全部楼层
lapackapi 的做法好像不太对吧,第三步产生的完全可能是同一个i 啊,对否?
回复

使用道具 举报

发表于 2004-8-2 15:49:49 | 显示全部楼层
我刚学C的时候写过“猜数字”游戏,要求就是这样。
我没什么好办法,只是每产生一个数后,跟前面产生的数比较一下是否重复,如果不重复,则使用,如果重复,则重复产生。
回复

使用道具 举报

发表于 2004-8-2 18:10:08 | 显示全部楼层
[quote:ddd46dbb95="qtduoduo"]lapackapi 的做法好像不太对吧,第三步产生的完全可能是同一个i 啊,对否?[/quote]
在第3步的最后, 要执行a=a[--m]; 这就等于说, 每取出一个数之后就马上把它擦掉了.
回复

使用道具 举报

发表于 2004-8-2 18:26:25 | 显示全部楼层
下面这一小段程序算是一个演示吧:
[code:1]
#include <stdlib.h>
#include <time.h>

int ran_int (int m)
{
    return (int)((double)m*rand()/(RAND_MAX+1.0));
}

#define MM 10

int main ()
{
    int a[MM], b[MM];
    int i, k, m;

    srand(time(NULL));

    for (k = 0; k < MM; ++k) a[k] = k;

    m = MM;
    for (k = 0; k < MM; ++k)
    {
        i = ran_int(m);
        b[k] = a[i];
        a[i] = a[--m];

        printf("%d ...... %d \n", k, b[k]);
    }
}
[/code:1]
回复

使用道具 举报

 楼主| 发表于 2005-3-4 19:45:26 | 显示全部楼层
明白,good!
回复

使用道具 举报

发表于 2005-3-5 10:43:18 | 显示全部楼层
007是不是王叉?!
回复

使用道具 举报

发表于 2005-3-7 11:39:28 | 显示全部楼层
大学时候的导师就是研究随机数的,可是我没去学它。严格来说计算机不会有真正的随机数,就像不可能有真正的模糊计算一样,真模糊了人就要摸不着头脑了。如果说要找一个好的算法来产生随机数序列,还是先把数学搞好,这东东太高深,俺不会。利用现成函数的话,就从种子下手咯,一个合格的随机函数如果用时间做种子的话应该不大可能有相同的序列产生。
回复

使用道具 举报

发表于 2005-3-9 10:43:04 | 显示全部楼层
http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/emt.html
回复

使用道具 举报

发表于 2005-3-10 15:30:17 | 显示全部楼层
#include <stdio.h>
#include <time.h>
#include<stdlib.h>
int main()
{
        int i[]={1,2,3,4,5,6,7,8,9,0};
        srand(time(NULL));
        int n=0;
        int m=0;
        int size=sizeof(i)/sizeof(int);
        int t=0;
        //rand
        for(n=0;n<size;n++)
        {
                m=rand()%size;
                t=i[n];
                i[n]=i[m];
                i[m]=t;
        }
        //show
        for(n=0;n<size;n++)
        {
                printf("%d ",i[n]);
        }
}
回复

使用道具 举报

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

本版积分规则

GMT+8, 2024-11-6 13:41 , Processed in 0.048174 second(s), 14 queries .

© 2021 Powered by Discuz! X3.5.

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