CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  新手乐园

请问怎样生成1到500之间的随机数(整数)

楼主july1983()2006-03-04 17:40:10 在 C/C++ / 新手乐园 提问

如题,包括1和500。 问题点数:0、回复次数:16Top

1 楼cunsh(村少)回复于 2006-03-04 18:07:11 得分 0

rand()   /   500   +   1Top

2 楼qhfu(改个名字)回复于 2006-03-04 18:35:00 得分 0

srand();//种子  
  rand();//随机数生成器。  
  关键是种子初始化,否则可能会出现,每次出现的随机数都一样的事情Top

3 楼ugg(逸学堂(exuetang.net))回复于 2006-03-04 18:39:16 得分 0

(rand()%500)   +   1  
  Top

4 楼dx30611(想要clean code)回复于 2006-03-04 19:08:56 得分 0

#include   <stdlib.h>  
  #include   <stdio.h>  
  #include   <time.h>  
   
  int   main(   void   )  
  {  
        int   i;  
        srand(   (unsigned)time(   NULL   )   );  
   
        /*   Display   10   numbers.   */  
        i=rand()%500+1;  
        printf("%d",i);  
        system("pause");  
  }Top

5 楼cunsh(村少)回复于 2006-03-04 19:55:53 得分 0

晕.我弄错了.Top

6 楼willingbupt(buptcsdn)回复于 2006-03-04 20:12:39 得分 0

另外一种方法  
  #include   <iostream.h>  
  void   main()  
  {   long   a;  
   
      __asm   rdtsc  
      __asm   mov   a,eax  
    i=a%500+1;  
  cout<<i;  
   
  }Top

7 楼zhengqdl(悄得乐)回复于 2006-03-05 10:36:30 得分 0

..............楼上没事炫什么汇编嘛....Top

8 楼lostbird(迷失的小鸟)回复于 2006-03-05 10:36:45 得分 0

《c常见问题集》有这么一段:  
  13.14   怎样获得在一定范围内的随机数?  
  直接的方法是rand()   %   N   /*   不好*/  
  试图返回从0   到N   -   1   的数字。但这个方法不好,   因为许多随机数发生器的低位比特并不随机。  
  一个较好的方法是:  
  (int)((double)rand()   /   ((double)RAND_MAX   +   1)   *   N)  
  如果你不希望使用浮点,   另一个方法是:  
  rand()   /   (RAND_MAX   /   N   +   1)  
  两种方法都需要知道RAND   MAX,   而且假设N   要远远小于RAND_MAX。  
  RAND   MAX   在ANSI   里#define   在<stdlib.h>。  
  顺便提一下,   RAND   MAX   是个常数,   它告诉你C   库函数rand()   的固定范围。你不可以设RAND   MAX   为其它的值,   也没有办法要求rand()   返回其它范围的值。  
  如果你用的随机数发生器返回的是0   到1   的浮点值,   要取得范围在0   到N   -   1内的整数,   只要将随机数乘以N   就可以了。  
  参考资料:   [K&R2,   Sec.   7.8.7   p.   168];   [PCS,   PCS   Sec.   11   p.   172]。  
   
  所以应该这样:  
  #include   <stdlib.h>  
  #define   N   500  
  ……  
  rand()   /   (RAND_MAX   /   N   +   1)   +   1;Top

9 楼lostbird(迷失的小鸟)回复于 2006-03-05 10:46:04 得分 0

不过我在dev-c下试了一下,rand()在低位是随机的,用(rand()%500)   +   1就行了。Top

10 楼zzw820626(偶要分,偶要星星)回复于 2006-03-06 12:44:21 得分 0

(rand()%500)   +   1  
  Top

11 楼ox_thedarkness()回复于 2006-03-06 13:26:00 得分 0

willingbupt(buptcsdn)   (   )  
  的方法不是完全随机的  
   
  1   首先,假如在你的模,也就是500个CPU周期以内调用,则结果是连续变化的。  
   
  2   即使使用某种随散列方法,对于某些循环来说,由于很可能拥有完全相同的调用间隔,比如40周期,结果可能仍然不随机。Top

12 楼wumingchenchao(一缕阳光)回复于 2006-03-06 17:52:44 得分 0

这些我不知道啊,学习了Top

13 楼futureroad(future)回复于 2006-03-12 03:21:35 得分 0

看到这个问题,我也突然想到一个自己的问题,和3楼的优点类似,就是我在一个程序中用到了随机函数rand(),但是每次重新运行程序的时候都是一样的随机数,而且变化规律也是一样的。  
  比如程序中有这么一条语句:  
  for(int   i=0;i<=10;i++)  
  printf(“%d\n”,rand()%100);  
  假设运行程序的时候会出现3,7,23,54,等11个随机数,但是我关闭程序后重新运行还是会输出同样的顺序,而且是同样的值。为什么呢?那么又怎么样解决这个问题呢?Top

14 楼alen_ghl(东方求*)回复于 2006-03-12 12:03:41 得分 0

楼上的   用   srand(   (unsigned)time(   NULL   )   );选择种子,  
  这样每次程序运行选择的种子都不一样  
  得到的随机数就不会完全相同了Top

15 楼zzw820626(偶要分,偶要星星)回复于 2006-03-12 14:27:26 得分 0

(rand()%500)   +   1Top

16 楼Jedimaster(CRH = 耻辱号)回复于 2006-03-12 15:17:54 得分 0

RAND.H里面有MAX   NUMBER,调整一下  
   
  或者(int)RAND()/RAND_MAX*500Top

相关问题

  • 生成随机数
  • 怎样生成一个随机数? JAVA里生成随机数的范围是多少?
  • 怎样生成10个随机数,且其和为100?
  • 怎样生成-0.2到0.2之间的随机数
  • 怎样生成两个小数之间的随机数
  • 如何生成随机数?
  • 如何生成随机数?
  • 生成4位随机数
  • 用vba生成随机数
  • 怎样求一个随机数,它是1至24内的任一整数?

关键词

  • 随机数
  • rand
  • 值
  • 程序
  • 范围
  • 一样
  • 方法
  • max
  • include

得分解答快速导航

  • 帖主:july1983

相关链接

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

广告也精彩

反馈

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