题目:编写一个模拟抽签的程序,规定每根签被抽走后不再放回。该抽签问题的具体要求是:
1) 参加抽签的人数为N,由键盘输入,之后编号。
2) 每个人抽一根签,并且签也顺序编号。
3) 每根签必须有内容。设签内的内容为:A, B, C,…等一些不同的字符或串。
1.需求分析
这里假设为N个人抽取随机数(幸运数字),幸运数字不能有重复的。
输入:人数int型
输出:给每个人的编号,以及各自的幸运数字
2.概要设计
总体的流程图:
3.详细设计
int A[N];//人的编号
int B[N];//签的编号
int n=3;//人数和签的数量都是n,默认为3
//给人编号
for (j=0;j<n;j++)
{ A[j]=10111290+j; }
//随机数生成签,没有重复的签
srand( (int)time( NULL ) );
do
{
for (i=0;i<n;i++)
{
B[i]=rand();
// cout<<"签["<<i<<"]="<<B[i]<<""<<endl;
}
}while (!ChongFu(B,n));
//输出结果
4.调试分析
当有M套试卷的时候,让随机生成的数字为0……M-1,然后让之成为试卷的编号,那么本程序就是一个随机生成试卷的程序。已经实现。
5.使用说明
运行程序,按照提示即可。
若要改变抽签的人数,请修改程序开始的#define N 10;如果进行试题分配,那么还需要添加试题,即数组C[]。
6.测试结果
测试组一:随机生成一个int型数据
请输入参加抽签的人数2
编号为10111290的同学,您的幸运数字是27655
编号为10111291的同学,您的幸运数字是28898
测试组二:生成0到9的随机数
最多有10个人抽签,每个人抽到的幸运数字都是不同的哦!
请输入参加抽签的人数9
编号为10111290的同学,您的幸运数字是6
编号为10111291的同学,您的幸运数字是4
编号为10111292的同学,您的幸运数字是3
编号为10111293的同学,您的幸运数字是0
编号为10111294的同学,您的幸运数字是9
编号为10111295的同学,您的幸运数字是5
编号为10111296的同学,您的幸运数字是1
编号为10111297的同学,您的幸运数字是2
编号为10111298的同学,您的幸运数字是7
测试组三:给n个考生分配试题
最多有10个人参加考试,每个人抽到的试卷都是不同的哦!
请输入参加考试的人数10
编号为10111290的同学,您的考试题的编号是2,内容为 数据结构
编号为10111291的同学,您的考试题的编号是5,内容为 计算机组成原理
编号为10111292的同学,您的考试题的编号是7,内容为 离散数学
编号为10111293的同学,您的考试题的编号是0,内容为 计算机网络
编号为10111294的同学,您的考试题的编号是1,内容为 高等数学
编号为10111295的同学,您的考试题的编号是6,内容为 Delphi程序设计
编号为10111296的同学,您的考试题的编号是8,内容为 图像处理
编号为10111297的同学,您的考试题的编号是3,内容为 计算机图形学
编号为10111298的同学,您的考试题的编号是4,内容为 JAVA
编号为10111299的同学,您的考试题的编号是9,内容为 数据库
7.附录
源程序文件清单。
// ChouQian.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <iostream> #include <stdlib.h> #include <string> #include <string.h> #include <time.h> #include <math.h> using namespace std; #define N 10 //查看数组A[n]中是否有重复的元素 bool ChongFu(int A[],int n) { for (int i = 0; i < n; i++) { int temp = A[i]; int j; for (j = 0; j < i; j++) { if (temp == A[j]) { return false; } } for (j = i + 1; j < 10; j++) { if (temp == A[j]) { return false; } } } return true; } int _tmain(int argc, _TCHAR* argv[]) { // cout<<"最多有"<<N<<"个人抽签,每个人抽到的幸运数字都是不同的哦!"<<endl<<endl; cout<<"最多有"<<N<<"个人参加考试,每个人抽到的试卷都是不同的哦!"<<endl<<endl; int A[N];//人的编号 int B[N];//签的编号 int n=3;//人数和签的数量都是n,默认为 // cout<<"请输入参加抽签的人数"; cout<<"请输入参加考试的人数"; cin>>n; //试卷的内容,分派试卷,试卷不能有重复的 string C[N]; C[0]="数据结构"; C[1]="计算机组成原理"; C[2]="离散数学"; C[3]="计算机网络"; C[4]="高等数学"; C[5]="Delphi程序设计"; C[6]="图像处理"; C[7]="计算机图形学"; C[8]="JAVA"; C[9]="数据库"; int i,j,k; //给人编号 for (j=0;j<n;j++) { A[j]=10111290+j; // cout<<"第"<<j+1<<"个人的编号为:"<<A[j]<<endl; } //随机数生成签,没有重复的签 srand( (int)time( NULL ) ); do { for (i=0;i<n;i++) { B[i]=rand()%N; // cout<<"签["<<i<<"]="<<B[i]<<" "<<endl; } }while (!ChongFu(B,n)); //输出结果 for(k=0;k<n;k++) { // cout<<"编号为"<<A[k]<<"的同学,您的幸运数字是"<<B[k]<<" "<<endl; cout<<"编号为"<<A[k]<<"的同学,您的考试题的编号是"<<B[k]<<",内容为"<<C[k]<<endl; } system("pause"); return 0; }