首页 > 试题广场 >

用线性同余法生成随机数序列的公式为: rk = ( m

[问答题]

用线性同余法生成随机数序列的公式为:

rk = ( multiplier × rk-1 + increment ) % modulus

序列中的每一个数rk都可以由它的前一个数rk-1计算出来。例如,如果有:

rk = ( 25 173 × rk-1 + 13 849 ) % 65 536

则可以产生65 536个各不相同的整型随机数。设计一个函数作随机数生成器,生成1位或2位数的随机数。

利用这个随机数生成器,编写一个小学生学习四则运算的练习程序,要求:

l 可以进行难度选择,一级难度只用1位数,二级难度用2位数;

l 可以选择运算类型,包括加、减、乘、除等;

l 可以给出错误提示;

l 可以统计成绩。

推荐
#include<iostream>
using namespace std;
int Rand(int,int);            //生成指定范围的随机数
int main()
{
int w,i,r,t = 0;
char op,answer;
int a,b,d;
while(1)                   //练习开始
{
cout<<"现在开始?( Y或N )\n" ;
cin>>answer;
if (answer=='N'||answer=='n') break;
while(1)
{
cout << "请输入难度( 1或2 ):";
cin >> w;
if ( w != 1 && w != 2 )
cout << "输入难度错误,重新输入!" << endl;
else
break ;
}
while(1)
{
cout << "请输入运算类型( +,-,*,/ ):" ;
cin >> op;
if ( op != '+' && op != '-' && op != '*' && op != '/' )
cout << "输入运算符错误,重新输入!" << endl;
else
break;
}
//出10道题,每题10分
t=0;
for( i=1; i<=10; i++ )
{
while(1)
{  if( w == 1 )
{
a = Rand(0,10); b = Rand(0,10);
}
else
if( w == 2 )
{
a = Rand(10,100); b = Rand(10,100);
}
if ( op == '-' )
if ( a<b )  continue ;               //使被减数大于减数
if ( op == '/' )
if ( int( a/b ) != (a / b) )  continue;     //只做结果为整数的除法
break;
}
cout << a << op << b << '=';
cin >> d;
switch ( op )
{
case '+': r = a + b; break;
case '-': r = a - b; break;
case '*': r = a * b; break;
case '/': r = a / b; break;
}
if ( r == d )
{
cout << "你算对了,加10分!" << endl;
t = t + 10;
}
else
cout << "你算错了!" << endl;
}
cout << "你的成绩是:" << t << "分" << endl;
}
}
int Rand(int m, int n)
{
static int r;            //静态变量保留上一个随机数
do
{
r = ( 25173*r + 13849 ) % 65536 ;
} while (r<m||r>=n);
return r;
}

发表于 2018-05-07 11:38:18 回复(0)