好家伙,
題目如下:
1.舞伴配對問題:假設在周末舞會上,男士們和女士們進入舞廳時,各自排成一隊,跳舞開始時,依次從男隊和女隊的隊頭上各出一人配成舞伴,
2.若兩隊初始人數不相同,則較長的那一隊中未配對者等待下一輪舞曲,要求撰寫程式,模擬上述舞伴配對問題,且規定:
程式的輸入時:進入舞廳人員的姓名和性別,
程式輸出是:如果是配對的,則輸出兩個舞伴的人的姓名;
如果是未配成對的,則輸出等待配對的人數和下一輪舞曲開始時第一個可獲得舞伴的人,
題目分析如下:
首先建立兩個佇列,一個佇列存放男士,一個佇列存放女士,
配對時,每輪每個佇列的隊頭元素出來配對,未配對的放到下一輪繼續配對,
最后,將有剩余的男或女輸出
(用m和f分別表示男和女,m:male,f:female)
#include <iostream>
using namespace std;
//定義一個人的結構體,用于存放參加舞會的人員的名字和性別
typedef struct
{
char name[20];
char sex;
}Person;
//定義一個佇列的結構體,成員變數有結構體陣列、頭指標、尾指標和佇列長度
typedef struct
{
Person person[20];
int front1=0;
int rear=0;
int count1=0;
}SqQuene;
//配對函式
void Arrange(Person* person,SqQuene* Male,SqQuene* Female,int num)
{
cout<<"請輸入參與舞會的人員的名字和性別:(M/m:男 F/f:女)"<<endl;
//根據你輸入的人數,進行回圈輸入成員的資訊,同時根據成員的性別分別插入對應的佇列
for(int i = 0;i < num; i++)
{
cin>>person[i].name>>person[i].sex;
if(person[i].sex == 'M' || person[i].sex == 'm')
{
Male->person[Male->rear++] = person[i];
Male->count1++;
}
else if(person[i].sex == 'F' || person[i].sex == 'f')
{
Female->person[Female->rear++] = person[i];
Female->count1++;
}
else
{
cout<<"您的輸入有誤,請重新輸入!"<<endl; //如果輸入的性別有誤,就重新輸入,并保證人數不會出錯
i--;
}
}
cout<<"配對結果:"<<endl;
cout<<"男 女"<<endl;
while(Male->count1 > 0 && Female->count1 > 0) //當兩個佇列的個數不為0時,輸出兩個佇列的對頭元素
{
cout<<Male->person[Male->front1].name<<"——"<<Female->person[Female->front1].name<<endl;
Male->front1++;
Female->front1++;
Male->count1--;
Female->count1--;
}
//如果男士隊有剩余,輸出男士隊的隊頭元素
if(Male->count1 > 0)
{
cout<<"下一輪男生隊伍的第一位:"<<Male->person[Male->front1].name<<endl;
}
//如果女士隊有剩余,輸出女士隊的隊頭元素
if(Female->count1 > 0)
{
cout<<"下一輪女生隊伍的第一位:"<<Female->person[Female->front1].name<<endl;
}
//否則無剩余
if(Male->count1 == 0 && Female->count1 == 0)
{
cout<<"該輪無剩余人員!"<<endl;
}
}
int main()
{
int num,flag = 1; //定義兩個變數,一個存放插入的人數,一個是標志變數
Person* person = new Person[20]; //定義一個結構體陣列
SqQuene* female = new SqQuene; //定義一個指向女佇列的佇列指標
SqQuene* male = new SqQuene; //定義一個指向男佇列的佇列指標
while(flag == 1) //判斷回圈條件
{
cout<<"請輸入本輪跳舞的人數:"<<endl;
cin>>num;
Arrange(person,male,female,num); //呼叫配對函式
cout<<"輸入1繼續"<<endl;
cin>>flag; //判斷變數是否滿足回圈條件
}
delete []person; //釋放陣列所占空間
cout<<"感謝您的使用,再見!"<<endl;
return 0;
}
輸入樣例:
panghu m
xiaofu m
jinxiang f
xiaohong f
xiaobing f
輸出樣例:
男 女
panghu——jinxiang
xiaofu——xiaohong
下一輪女生隊伍的第一個:xiaobing
圖示:

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/538624.html
標籤:其他
