舞会的舞伴配对问题:
某单位举办周末友谊舞会,在舞会上,男、女各自排成一队。舞会开始时,依次从男队和女队的队头各出一人配成舞伴。如果两队初始人数不等,则较长的那一队中未配对者等待下一轮舞曲。假设初始男、女人数已经固定,舞会的轮数表示舞曲数。试模拟解决上述舞伴配对问题。
核心代码:
void PartnerPairing(CQueue &Qm,CQueue &Qw,int Rotation){
int n,m,Min;
m=(Qm.Rear-Qm.Front+Maxn)%Maxn;
n=(Qw.Rear-Qw.Front+Maxn)%Maxn;
printf("%d %d\n",n,m);
Min=m
QElemType man,woman,dancer;
for(int i=0;i
for(int j=0;j
DeQueue(Qm,man);DeQueue(Qw,woman);
cout<"<
EnQueue(Qm,man);EnQueue(Qw,woman);
}
m>n?GetHead(Qm,dancer):GetHead(Qw,dancer);
cout<
}
}
完整的调试代码:
#include
#include
#include
#include
#include
#define Maxn 100
#define QueueSize 100
using namespace std;
typedef struct QElemType{
string name;
int age ;
QElemType(string t="Bin",int Age=20){
name=t;age=Age;
}
}QElemType;
typedef struct {
QElemType *base;
int Front ,Rear;
}CQueue;
void InitQueue(CQueue &Q){
Q.base = new QElemType [ QueueSize ];
Q.Front = Q.Rear = 0;
}
void EnQueue(CQueue &Q,QElemType e){
Q.base[Q.Rear]=e;
Q.Rear=(Q.Rear+1)%Maxn;
}
void DeQueue(CQueue &Q,QElemType &e){
if(Q.Front==Q.Rear){
printf("error !!! Queue is empty !!!\n");return ;
}
e=Q.base[Q.Front++];
Q.Front=Q.Front%Maxn;
}
void GetHead(CQueue &Q,QElemType &e){
if(Q.Front==Q.Rear){
printf("error !!! Queue is empty !!!\n");return ;
}
e=Q.base[Q.Front];
}
void PartnerPairing(CQueue &Qm,CQueue &Qw,int Rotation){
int n,m,Min;
m=(Qm.Rear-Qm.Front+Maxn)%Maxn;
n=(Qw.Rear-Qw.Front+Maxn)%Maxn;
printf("%d %d\n",n,m);
Min=m
QElemType man,woman,dancer;
for(int i=0;i
for(int j=0;j
DeQueue(Qm,man);DeQueue(Qw,woman);
cout<"<
EnQueue(Qm,man);EnQueue(Qw,woman);
}
m>n?GetHead(Qm,dancer):GetHead(Qw,dancer);
cout<
}
}
int main()
{
int n,m,Rotation;
QElemType man,woman;
CQueue Qm,Qw;
InitQueue(Qm),InitQueue(Qw);
printf("请输入舞会 男舞者,女舞者各人数: \n");
cin>>n>>m;
printf("请输入%d位男舞者的名字和年龄\n",n);
for(int i=0;i
printf("第%d位 男舞者 name , age \n",i+1);
cin>>man.name>>man.age;
EnQueue(Qm,man);
}
printf("请输入%d位女舞者的名字和年龄",m);
for(int i=0;i
printf("第%d位 女舞者 name , age \n",i+1);
cin>>woman.name>>woman.age;
EnQueue(Qw,woman);
}
printf("请输入需要多少轮舞会: ");
scanf("%d",&Rotation);
PartnerPairing(Qm,Qw,Rotation);
return 0;
}