请问如何生成随机数?
在书上看到这样一段话:
用线性同余法生成随机数序列的公式为:
Rk = (multiplier * Rk-1 + increment) % modulus
序列中的每一个数Rk,可以由它的前一个数Rk-1,计算出来。例如,如果有:
Rk = (25173 * Rk-1 + 13849) % 65536
可以产生65536个各不相同的整形随机数。请设计一个函数作随机数生成器,生成一位或两位数的随机数。
========================================================================
关于这段话,小弟愚昧,实在不懂,请哪位GGJJ赐教一下。 最好能给在下举个例子吧,小弟在此先行谢过!
问题点数:0、回复次数:8Top
1 楼plainsong(短歌)()回复于 2003-11-04 18:56:55 得分 0
不带格式的文字表示数列时很不方便。
R[k] = (25173 * R[k-1] + 13849) % 65536
写成Random函数就是:
int rand_seed
int random()
{
(rand_seed * 25173 + 13849) % 65536;
return rand_seed;
}Top
2 楼scutlight(临风)回复于 2003-11-04 19:45:41 得分 0
还是不明白:(
rand_seed是全局变量吧,那它不是自动赋值为0吗?
random的返回值也就为0呀
Top
3 楼plainsong(短歌)()回复于 2003-11-04 19:47:30 得分 0
对不起,写错了。
int rand_seed
int random()
{
rand_seed = (rand_seed * 25173 + 13849) % 65536;
return rand_seed;
}Top
4 楼scutlight(临风)回复于 2003-11-04 19:56:40 得分 0
我想知道生成了哪些随机数,代码如下:
#include <iostream.h>
int rand_seed;
int random()
{
rand_seed = (rand_seed * 25173 + 13849) % 65536;
return rand_seed;
}
void main()
{
cout<<random;
}
=====================================================
但运行结果为:
0x00401005
这并不是我想要的,也许是我太笨了,请你说详细一点好么?Top
5 楼thmoftherain(小风)回复于 2003-11-04 20:00:36 得分 0
int rand_seed;
int random(int y)
{
return (y * 25173 + 13849) % 65536;
}Top
6 楼thmoftherain(小风)回复于 2003-11-04 20:04:09 得分 0
#include <iostream.h>
main()
{
int y = rand_seed;
do{
y = random(y);
}while(y!=rand_seed);
return 0;
}
Top
7 楼scutlight(临风)回复于 2003-11-04 20:07:02 得分 0
回复人: thmoftherain(小风) ( ) 信誉:100 2003-11-04 20:00:00 得分:0
int rand_seed;
int random(int y)
{
return (y * 25173 + 13849) % 65536;
}
=========================================================================
int rand_seed;在你这里有什么意义?Top
8 楼thmoftherain(小风)回复于 2003-11-04 20:24:38 得分 0
rand_seed 作为产生随机数的种子,又他开始计算出一个好像相对无关的数,这个数又作为下一个“随机数”的种子,这里由于随机数的算法可以产生65536个各不相同的整形随机数,所以rand_seed
的初值随意,经过65536次运算又得到该值,若每次rand_seed得值不变的话,每次运算得到的都是一样的随机数序列Top




