请问怎样生成1到500之间的随机数(整数)
如题,包括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




