现在的位置: 首页 > 综合 > 正文

数据结构作业-L1

2013年10月09日 ⁄ 综合 ⁄ 共 2582字 ⁄ 字号 评论关闭

题目:编写一个模拟抽签的程序,规定每根签被抽走后不再放回。该抽签问题的具体要求是:

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;
}


 

抱歉!评论已关闭.