CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

请问,怎样产生随机数?????

楼主imlovinit(婷婷)2003-12-01 15:52:35 在 C/C++ / C语言 提问

 
  int   second=0,i,j;  
  int   random()  
   
  {       unsigned   d;  
          int   r,s;  
          long   *p;  
          p=(long*)malloc(4);  
          time(p);  
          d=((unsigned)*p)+second;  
          second++;  
          srand(d);  
          for(s=0;s<=48||s>=57;)   //0--9  
          {r=rand();  
          s=r%58+1;}  
          free(*p);  
          return   s;  
  }  
  creat(char   array[5])  
  {       for(i=0;i<5;i++)  
                array[i]=random();  
          for(i=0;i<5;i++)  
          {       for(j=i+1;j<5;j++)  
          {         if((array[i]-array[j])==0)   {creat(array);}  
                  }  
          }  
  }  
   
  以上的creat()函数是用来随机产生5个数,不重复(0--9),初学编程,请各位指点指点,是否可以改进?不用time()做种子,还可以用什么? 问题点数:50、回复次数:9Top

1 楼quieter(believe in professional)回复于 2003-12-01 15:58:07 得分 10

呵呵,女孩子,有前途!Top

2 楼bohut(●伯虎● )回复于 2003-12-01 15:58:29 得分 10

#include   <stdlib.h>  
  #include   <stdio.h>  
  #include   <time.h>  
   
  void   main(   void   )  
  {  
        int   i;  
   
        /*   Seed   the   random-number   generator   with   current   time   so   that  
          *   the   numbers   will   be   different   every   time   we   run.  
          */  
        srand(   (unsigned)time(   NULL   )   );  
   
        /*   Display   10   numbers.   */  
        for(   i   =   0;       i   <   10;i++   )  
              printf(   "     %6d\n",   rand()   );  
  }  
  Top

3 楼ericzhangali(另一个空间)回复于 2003-12-01 16:25:23 得分 10

在FAQ里搜一下,这些帖子也许对你有帮助。  
   
  http://expert.csdn.net/Expert/FAQ/FAQ_Index.asp?id=218  
  http://expert.csdn.net/Expert/FAQ/FAQ_Index.asp?id=944  
  http://expert.csdn.net/Expert/FAQ/FAQ_Index.asp?id=174676  
  http://expert.csdn.net/Expert/FAQ/FAQ_Index.asp?id=171425  
  Top

4 楼imlovinit(婷婷)回复于 2003-12-01 16:53:53 得分 0

#include   <stdlib.h>  
  #include   <stdio.h>  
  #include   <time.h>  
   
  main()  
  {     int   x,y;  
        char   array[5];  
        srand(   (unsigned)time(   NULL   )   );  
        for(x=0;x<5;x++)  
                for(y=0;y<=48||y>=57;)  
                {     y=rand();     array[i]=y;}  
        for(i=0;i<5;i++)  
              printf("%c",array[i]);  
        printf("\n");  
  用以上程序产生的随机数是有重复的,如果想得到没有得复的数,该如何做?Top

5 楼lazygod(Use any item)回复于 2003-12-01 17:41:53 得分 10

int   i,   j,   num[5];  
       
      srand((unsigned)time(NULL));  
   
      for(   i   =   0;   i   <   5;   i   ++)  
      {  
          num[i]   =   rand()%10;  
   
  j   =   0;  
  while(j   <   i)  
  {  
  if(num[i]   ==   num[j])  
  {  
  printf("%d,",   num[i]);  
  num[i]   =   (num[i]   +   rand())%10;  
  j   =   0;  
  }  
  else  
  j   ++;  
  }  
   
  printf("%d\n",   num[i]);  
      }  
   
  用Time做种子,仍可能会产生大量相同的数(比如TC)。以上办法可以解决这个  
   
  任何不固定正在动的都是好种子Top

6 楼TianGuangZao(天光早)回复于 2003-12-01 19:49:39 得分 0

没有重复的数就不叫随机数了。Top

7 楼haowh(一个人走在黑黑的夜)回复于 2003-12-01 20:45:41 得分 0

真正好的随机数根本不用rand   ,一般都采用一些很复杂的算法来产生一个种子,然后在对种子  
  进行一般非常人想象得操作。当然一般用的很多的是   异或当前的进程和系统当前的时间,然后放到一个一个随机pool中,然后再对这个随机pool   进行散列。   真晕,以前作过一个真麻烦,而且没法获得真正随机的种子。Top

8 楼TianGuangZao(天光早)回复于 2003-12-01 21:13:47 得分 0

好想知道你是如何证明你编的随机数算法优于   rand。Top

9 楼caohoujie()回复于 2003-12-01 22:25:11 得分 10

#include<iostream>  
  #include<cstdlib>  
  #include<ctime>  
  using   namespace   std;  
   
  void   CreateRand(unsigned   *a,unsigned   *b,unsigned   n,unsigned   m)  
  {  
  unsigned   l=0,temp=n;  
  srand((unsigned)time(NULL));  
  while(l<m)  
  {  
  for(int   i=temp;i<n;i++)  
  a[i]=a[i+1];  
  temp=rand()%n--;  
  b[l++]=a[temp];  
  }  
  }  
   
  void   PrintArray(unsigned   *ar,unsigned   l)  
  {  
  for(int   i=0;i<l;i++) cout<<ar[i]<<'   ';  
  cout<<endl;  
  }  
  void   main()  
  {  
  unsigned   m=7,n=36;  
  unsigned   *a=new   unsigned[n];  
  unsigned   *b=new   unsigned[m];  
  for(int   i=0;i<n;a[i++]=i+1);  
  CreateRand(a,b,n,m);  
  PrintArray(b,m);  
  delete   []a;  
  delete   []b;  
  }  
  36选7大家拿去摸彩票Top

相关问题

  • 怎样产生随机数?
  • 怎样按概率产生随机数?
  • 怎样产生真正的随机数?
  • c#.net中怎样产生随机数
  • DEL中怎样产生随机数?
  • 怎样产生真正的随机数?
  • 怎样产生一随机数,请教
  • 请问怎样产生随机数?
  • 怎样产生真正的随机数?
  • 请问:怎样产生出现概率不同的随机数?

关键词

  • null
  • srand
  • unsigned
  • second
  • array
  • numbers
  • include
  • time

得分解答快速导航

  • 帖主:imlovinit
  • quieter
  • bohut
  • ericzhangali
  • lazygod
  • caohoujie

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo