问个C++的随机数问题

来源:百度知道 编辑:UC知道 时间:2024/06/09 02:41:22
有道题给了一个递推公式,我可以随便输入一个初始值产生伪随机数,然后又叫我从这产生的数中抽出两个数来进行加减乘除等运算。这个抽取的过程也要求是随机的,怎么抽取才能随机呢?谢谢高手作答。
原题是这样的:用线性同余法生成随机数序列公式为:
Rk=(multiplier*Rk-1+increment)%modulus
该序列中每一个Rk,可以由它前一个Rk-1计算出来。例如,如果有:
Rk=(25173*Rk-1+13849)%65536)
则可以生成65536个各不相同的整型随机数。设计一个函数做随机数生成器,生成一位或两位数的随机数。利用这个随机数生成器,编写加减乘除四则运算的练习程序。
我的意思就是说怎么从这65536个数里面取出两位数来计算,并且这两位数都不是刻意取的。谢谢。

可以把这道题全部贴出来嘛?
你说开始说 1个初始可以抽出1个数来,
后面又说 抽出2个数来?
什么意思?是同一个函数??
===================================
你那个函数看起好麻烦哦。
但是既然有随机数了,
好像只有 %100 就是两位数了。
要不就一直循环,直到取出小于100的数。

以下这个随机数函数可生成周期超长的随机数,而且应用了类似于混洗的技术——就是生成一个随机数序列然后再从中随机抽取一个数,克服了常用随机函数的排列不随机的缺点,随机数的初始值是系统的时间,这个函数生成的都是[0,1]之间的随机数,你要想生成[a,b]之间的随机数可以这样改,你需要的数=a+(b-a)*ran1(a)。

#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <iostream.h>
#include <iomanip.h>
#include <time.h>
#define IA 16807
#define IM 2147483647
#define AM (1.0/IM)
#define IQ 127773
#define IR 2836
#define NTAB 32
#define NDIV (1+(IM-1)/NTAB)
#define EPS 1.2e-7
#define RNMX (1.0-EPS)
unsigned int seed=0; //seed 为种子,要设为全局变量
void mysrand(long int i) //初始化种子
{
seed = -i;
}
float ran1(long *idum)
{
int j;
long k;
static long iy=0;
static