1027: 舞伴问题
题目描述
假设在周末舞会上,男士们和女士们进入舞厅时,各自排成一队。跳舞开始时,依次从男队和女队的队头上各出一人配成舞伴。若两队初始人数不相同,则较长的那一队中未配对者等待下一轮舞曲。要求编写程序实现舞伴问题。
输入
输入一共5行,第一行是男生人数m;第二行依次是男生的姓名;第三行是女士的人数n;第四行依次是女士的姓名;第五行是跳舞的轮数。
输出
配对的男士和女士的姓名。
样例输入
5
A B C D E
3
F G H
2
样例输出
B G
思路: 该题用队列完成,每轮一对男女出队列并入队列到队尾形成循环,循环到最后一次输出。
#include<bits/stdc++.h>
# define size 50
using namespace std;
struct Queue
{
char data;
Queue *next;
};
Queue *store(Queue *&p,int num,char c[])
{
p=new Queue;
p->data=c[0];
p->next=NULL;
Queue *l=p,*s;
for(int i=1;i<num;i++)
{
s=new Queue;
s->data=c[i];
s->next=NULL;
l->next=s;
l=s;
}
return l; //返回尾结点
}
void search(Queue *&head,Queue *&end)
{
Queue *l=head;
head=head->next;
l->next=NULL; //出队列
end->next=l; //入队列到队尾
end=end->next; //更新队尾结点
}
int main()
{
int n,m,num;
char a[size],b[size];
Queue *p1,*p2,*p3,*p4;
cin >> n;
for(int i=0;i<n;i++)
cin >> a[i];
p2=store(p1,n,a);
cin >>m;
for(int i=0;i<m;i++)
cin >> b[i];
p4=store(p3,m,b);
cin >> num;
for(int i=0;i<num;i++)
{
if(i==num-1)
{
cout << p1->data << ' ' << p3->data;
}
search(p1,p2);
search(p3,p4);
}
return 0;
}