好家伙,
题目如下:
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
图示: