| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4996 人关注过本帖
标题:请教:怎样产生在某个范围内不重复的随机数
只看楼主 加入收藏
lindayanglong
Rank: 1
等 级:新手上路
帖 子:86
专家分:0
注 册:2008-3-9
收藏
 问题点数:0 回复次数:13 
请教:怎样产生在某个范围内不重复的随机数
请教:怎样产生在某个范围内不重复的随机数?
搜索更多相关主题的帖子: 随机数 范围 
2008-03-11 18:18
lindayanglong
Rank: 1
等 级:新手上路
帖 子:86
专家分:0
注 册:2008-3-9
收藏
得分:0 
我自己写的不过随机数有重复
int i2,a2[150];
  printf("150 random numbers from 0 to 150\n\n");
      for(i2=0; i2<150; i2++)
      { a2[i2]=rand() % 150;
      printf("%d,", a2[i2]);
      }
       printf("\n");
2008-03-11 18:20
广陵绝唱
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:29
帖 子:3607
专家分:1709
注 册:2008-2-15
收藏
得分:0 
/*
在1~100之间取不相同的随机整数,也可以更改成更大范围,也可以加代码更改为用户输入范围。
*/


#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
          int m,n[20],i,j;
          printf("请输入您需要出现的20位以内随机数个数:\n");
          do
          {
                  scanf("%d",&m);
                  if(m<1||m>20)
                          printf("您输入的数字有误,请重新输入:\n");
          }
          while(m<1||m>20);
         for(i=0;i<=m;i++)
         {
                 srand(time(NULL)+i);
                 n[i]=rand()%100+1;  /*后面的100+1就是取值范围,说明在1~100之间*/
                 for(j=0;j<i;j++)
                 {
                         if(n[i]!=n[j])
                         {
                             printf("NO.%2d个随机数:%d\n",i,n[i]);
                             break;
                         }
                         else    i--;
                 }
        }


        getch();
}
2008-03-11 20:44
leeco
Rank: 4
等 级:贵宾
威 望:10
帖 子:1029
专家分:177
注 册:2007-5-10
收藏
得分:0 
比如要产生[a,b]内的随机数,就另arr[i]=a+i ,i=0,...b-a-1
然后对arr进行洗牌。就OK啦。
2008-03-11 21:58
agcaccc
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2008-3-8
收藏
得分:0 
srand(time(NULL)+i)是什么意思,请告知
2008-03-11 22:30
agcaccc
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2008-3-8
收藏
得分:0 
srand(time(NULL)+i)是什么意思,请告知
2008-03-11 22:30
lindayanglong
Rank: 1
等 级:新手上路
帖 子:86
专家分:0
注 册:2008-3-9
收藏
得分:0 
srand(time(NULL)+i);是啥意思啊
srand(time(NULL)+i);是啥意思啊,多谢指教
2008-03-11 22:39
广陵绝唱
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:29
帖 子:3607
专家分:1709
注 册:2008-2-15
收藏
得分:0 
这是随机数种子,一般是srand(time(NULL))这种形式。但由于它是随系统时间而改变种子,我怕系统时间没到一秒钟,但程序运行回来,所以产生了相同的数值。为了增加程序运行效率,所以我把它写为srand(time(NULL)+i);   

    这是我自己的想法,也不知道对不对,总之程序可以正确运行。如果有哪位通晓此理,倒可以指教一二。
2008-03-11 22:39
iFreeBSD
Rank: 4
等 级:业余侠客
威 望:4
帖 子:474
专家分:236
注 册:2007-11-5
收藏
得分:0 
TIME(3)                FreeBSD Library Functions Manual                TIME(3)

NAME
     time -- get time of day

LIBRARY
     Standard C Library (libc, -lc)

SYNOPSIS
     #include <time.h>

     time_t
     time(time_t *tloc);

DESCRIPTION
     The time() function returns the value of time in seconds since 0 hours, 0
     minutes, 0 seconds, January 1, 1970, Coordinated Universal Time.  If an
     error occurs, time() returns the value (time_t)-1.

     The return value is also stored in *tloc, provided that tloc is non-null.

// 这FreeBSD标准C库关于time()的介绍,很详细了

without further ado, let’s get started
2008-03-11 23:53
lindayanglong
Rank: 1
等 级:新手上路
帖 子:86
专家分:0
注 册:2008-3-9
收藏
得分:0 
最后为什么还要这个 getch();?
最后为什么还要这个 getch();?我发现有这句后会出现两个问题:
1 :\vc++实验\scrand\scrand.c(32) : warning C4013: 'getch' undefined; assuming extern returning int
scrand.obj - 0 error(s), 1 warning(s)
2 我输入20它产生了比20还要多的随机数
去掉这句就正常了,请解答一下
2008-03-12 10:26
快速回复:请教:怎样产生在某个范围内不重复的随机数
数据加载中...
 
   



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

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