问题描述:假设周末舞会上,男士们和女士们进入舞厅时各自排成一队。跳舞开始时,依次从男队和女队的队首各出列一名配成一对舞伴。若两队人数不同,则较长的那队中未配对的人等待下一首舞曲。是写一算法模拟上述配对问题。
解决方法:设置两个队列分别存男士和女士入队者。假设男士和女士的记录存在一个数组中作为输入,遍历数组将男士女士分别入队,对首出队配成舞伴,直至某队为空。此时,若某队仍有等待者,下一支舞曲开始时下一个入队的人排在此人后面。
入队,根据性别入不同的队列
cout<<"输入性别(以'#'截止):";
cin>>sex;
while (sex!='#'){//输入舞者的性别,以#截止
if (sex=='F'){
cout<<"输入女舞者姓名:";
cin>>name;
Fqueue.push(name);
}
if (sex=='M'){
cout<<"输入男舞者姓名:";
cin>>name;
Mqueue.push(name);
}
cout<<"输入性别(以'#'截止):";
cin>>sex;
}
出队,成对成对出队,落单的人等待下一波
while(!Mqueue.empty()&&!Fqueue.empty()){//成对出列
cout<<"男士:"<<Mqueue.front()<<' ';
Mqueue.pop();
cout<<"女士:"<<Fqueue.front()<<endl;
Fqueue.pop();
}
源代码
#include <iostream>
#include <queue>
#include <string>
using namespace std;
void main(){
char sex;
string name,choise;
queue < string > Mqueue;//男队列
queue < string > Fqueue;//女对列
do {
cout<<"输入性别(以'#'截止):";
cin>>sex;
while (sex!='#'){//输入舞者的性别,以#截止
if (sex=='F'){
cout<<"输入女舞者姓名:";
cin>>name;
Fqueue.push(name);
}
if (sex=='M'){
cout<<"输入男舞者姓名:";
cin>>name;
Mqueue.push(name);
}
cout<<"输入性别(以'#'截止):";
cin>>sex;
}
while(!Mqueue.empty()&&!Fqueue.empty()){//成对出列
cout<<"男士:"<<Mqueue.front()<<' ';
Mqueue.pop();
cout<<"女士:"<<Fqueue.front()<<endl;
Fqueue.pop();
}
cout<<"继续入队输入任意字符,停止入队输入END:";
cin>>choise;
} while (choise!="END");
system("pause");
}