注册 登录
编程论坛 C++教室

[求助]一道考试题

sky18888 发布于 2007-09-05 10:46, 565 次点击
编一完整程序,使其结果为:有N个人参加考试,一共36道题,33道问答题,3道应用题,使每人能随即抽到9道问答题和1道应用题。
7 回复
#2
chen78062007-09-05 14:41
我是菜鸟。根据我的想法说说。

设二个数组,问答题号a[33],应用题号b[3];

然后使用随机数产生9个题,1个题分别从二个数组a[33],b[3]中产生;

最后,打印题号出来。

不知道想得对否?
#3
远去的列车2007-09-05 15:15

要考虑 随机产生1~33中9个互不相等的数

#4
zhongwen2007-09-05 17:11

#include "iostream.h"
#include <stdlib.h>
#include <time.h>

#define N 10
int YY[33],WD[3];

int ayy[9],awd;


void GetWdNumber()
{
int i;
i=rand();
awd=WD[i%3]; //问答题
}
void GetYyNumber()
{
int i,j;
for(i=0;i<9;i++)
{
ayy[i]=rand()%33; //存放数组下标
for(j=0;j<i;j++)
if(ayy[j]==ayy[i])
i--;
}
}

int main()
{

srand((unsigned)time(NULL)); //产生随机数

int i;
int j;
for(i=0;i<33;i++)
YY[i]=i+1;
for(i=0;i<3;i++)
WD[i]=i+1;
for(i=1;i<N+1;i++)
{
GetWdNumber();
GetYyNumber();
cout<<"第"<<i<<"个人的选题结果:"<<endl;
cout<<"问答题:"<<endl;
cout<<awd<<endl;
cout<<"应用题:"<<endl;
for(j=0;j<9;j++)
cout<<YY[ayy[j]]<<"、";
cout<<endl;
}

return 1;
}

#5
wsy2007-09-05 20:13
受教了 关于随机数的产生 是不是用求余 就可以了?
#6
virusswb2007-09-06 14:56
rand()就可以产生0到1之间的小数
随机取就可以了,取出一个就在原数组中排除一个,在剩下的里面再次随机取,直到取到9个
#7
远去的列车2007-09-06 16:06
原来随机数的生成是这样子。
srand((unsigned)time(NULL)); 这句是关键,可以详细说明些吗?
没有这句,多次运行都会产生同一个数列了
#8
dearbot2007-09-06 17:02
厉害,要是我我准写蒙。还差得远那!
1