題目:編寫一個類比抽籤的程式,規定每根簽被抽走後不再放回。該抽籤問題的具體要求是:
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;}