| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 14935 人关注过本帖, 2 人收藏
标题:如何随机产生不重复的数
只看楼主 加入收藏
lrongh
Rank: 2
等 级:论坛游民
帖 子:39
专家分:24
注 册:2009-10-6
结帖率:100%
收藏(2)
已结贴  问题点数:10 回复次数:16 
如何随机产生不重复的数
比如说:我要产生20100以内的随机数且互不重复,怎么实现?百度了一下,没找到什么好的方法,不知坛子里的高人有什么妙招?要求:1:数字不能重复;2:不要使用比较;3:辅助空间尽可能地小------不用当然更好了.
搜索更多相关主题的帖子: 随机 
2009-10-13 09:24
m456m654
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:3
帖 子:783
专家分:2806
注 册:2009-9-17
收藏
得分:0 
#include<stdio.h>  
#include<time.h>  
....  
int x;  
srand((unsigned)time(NULL));
这个语句可以产生不重复的随机数。
2009-10-13 11:46
sen_lin
Rank: 6Rank: 6
等 级:侠之大者
威 望:3
帖 子:114
专家分:436
注 册:2009-3-24
收藏
得分:0 
在srand()后再使用rand()产生随机数,让产生的随机数对100取余即可得到了。
2009-10-13 11:55
lrongh
Rank: 2
等 级:论坛游民
帖 子:39
专家分:24
注 册:2009-10-6
收藏
得分:0 
楼上几位都没理解我的意思,我说的是产生的随机数序列里不能有相同的数!
2009-10-13 14:42
lrongh
Rank: 2
等 级:论坛游民
帖 子:39
专家分:24
注 册:2009-10-6
收藏
得分:0 
目前我能搜到的网上最好的办法是:先产生一个有序序列A[m],这个序列中的每一个数值都等于它的数组下标,然后设置一个循环for(i=0;i<m;i++),在这个循环体内产生一个不大于m的随机数n,将A[i]与A[n]交换...,这种方法不需要进行比较,也不需要额外的辅助空间,可惜它也有一个缺点:即数组的取值范围就是其下标的取值范围,如产生100个数都在100以内,产生20个数则都在20以内,不能做到产生20个100以内的(不重复)数.静候大虾出手......
2009-10-13 15:02
m456m654
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:3
帖 子:783
专家分:2806
注 册:2009-9-17
收藏
得分:0 
恩,又试了试,果然,在20个数里总会有相同的数出现。调了好一会,也没找到合适的限制条件。
2009-10-13 16:29
UserYuH
Rank: 12Rank: 12Rank: 12
来 自:毅华
等 级:火箭侠
威 望:8
帖 子:720
专家分:3300
注 册:2009-8-10
收藏
得分:5 
定义一个组数,存入0~99,随机取一个,做个标记,这样取20个就不会有重复。
程序代码:
#include <stdio.h> 
#include <time.h> 
int main(void) 
{ 
 int i,n,a[100]; 
 srand(time(0)); 
 for(i=0;i<100;i++) 
   a[i]=i; 
 i=0; 
 while(1) 
   { 
    n=rand()%100; 
    if(a[n]!=-1) 
      { 
       printf("%d ",n); 
       a[n]=-1; 
       if((++i)==20)break; 
      } 
   } 
 printf("\n\n"); 
 return 0;
}

努力—前进—变老—退休—入土
2009-10-13 17:25
广陵绝唱
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:29
帖 子:3607
专家分:1709
注 册:2008-2-15
收藏
得分:5 
程序代码:
#include <stdio.h>
int main(void)
{
    int num[100];
    int i,n;
   
    for(i=0;i<100;++i)
    {
        num[i]=200;
    }
    srand(time(NULL));
    for(i=0;i<20;)
    {
        n=rand()%100;
        if(num[n]==200)
        {
            printf("%2d%c",num[n]=n,++i%5?' ':'\n');
        }
    }
    puts("");
   
    return 0;
}

2009-10-13 17:52
m456m654
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:3
帖 子:783
专家分:2806
注 册:2009-9-17
收藏
得分:0 
学习了。
2009-10-13 18:14
xiaoqing8731
Rank: 2
等 级:论坛游民
帖 子:23
专家分:32
注 册:2009-10-9
收藏
得分:0 
UserYuH  写的太棒了  佩服  学习
2009-10-13 20:17
快速回复:如何随机产生不重复的数
数据加载中...
 
   



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

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