#include<stdlib.h>
#include<iostream>
#include<fstream>
#include<string>
#define MAXQSIZE 100
#define OK 1
#define error 0
#define OVERFLOW -2
using namespace std;
typedef struct{
char name[20];
char sex;
}Person;
typedef struct{
Person *base;
int front;
int rear;
}SqQueue;
SqQueue Mdancers, Fdabcers;
int InitQueue(SqQueue &Q) {
Q.base = new Person[MAXQSIZE];
if(!Q.base)
exit(OVERFLOW);
Q.front = Q.rear = 0;
return OK;
}
int EnQueue(SqQueue &Q,Person e){
if((Q.rear + 1) % MAXQSIZE == Q.front)
return error;
Q.base[Q.rear] = e;
Q.rear=(Q.rear + 1) % MAXQSIZE;
return OK;
}
int DeQueue(SqQueue &Q,Person &e)
{
if(Q.front == Q.rear)
return error;
e=Q.base[Q.front];
Q.front = (Q.front + 1) % MAXQSIZE;
return OK;
}
Person GetHead(SqQueue Q) {
if(Q.front != Q.rear)
return Q.base[Q.front];
}
void DancePartner(Person dancer[],int num){
InitQueue(Mdancers);
InitQueue(Fdancers);
Person p;
for(int i = 0 ; i < num; i++)
{
p = dancer[i];
if(p.sex == 'F')
EnQueue(Fdancers,p);
else
EnQueue(Mdancers,p);
}
cout << "舞伴配对名单:" << endl;
cout << " 女 男"<< endl;
while(Fdancers.front != Fdancers.rear && Mdancers.front != Mdancers.rear){
DeQueue(Fdancers,p);
cout << p.name <<" ";
DeQueue(Mdancers, p);
cout << p.name<<endl;
}
if(Fdancers.front != Fdancers.rear){
p = GetHead(Fdancers);
cout << "下一场第一位男士的舞伴是: "<< endl;
cout << p.name << endl;
}else if(Mdancers.front != Mdancers.rear){
p = GetHead(Mdancers);
cout << "下一场第一位女士的舞伴是: "<< p.name << endl;
}
}
int main(){
Person dancer[18]={{"金城武",'M'},{"吴彦祖",'M'},{"刘亦菲",'F'}.{"王思聪",'M'},{"高圆圆",'F'},{"王冰冰",'F'},{"许丹丹",'F'},{"古天乐",'M'},{"周杰伦",'M'},{"李荣浩",'M'},{"刘德华",'M'},{"冉小熙",'F'},{"谢春梅",'F'},{"胡思琪",'F'},{"蒋雅琪",'F'},{"马小云",'M'},{"张智霖",'M'},{"王力宏",'M'}};
DancePartner(dancer,18);
}
仅供参考:
//舞会上,男士们(m人)和女士们(n人, n<m)进入舞厅时,各自排成一队。跳舞开始时,依次从男队和女队的队头上各出一人配成舞伴。
//男队中未配对者等待下一轮舞曲。现要求写一算法模拟上述舞伴配对问题。在第t首曲子时,第x个女生和第几个男生配对跳舞?
#include <stdio.h>
#include <string.h>
#define MAX 26
int m,n,t,x,y,i,j,k;
char md[MAX];
char nd[MAX];
char c;
void main() {
while (1) {
printf("Input n m(1<=n<m<=%d):",MAX);
fflush(stdout);
rewind(stdin);
if (2==scanf("%d%d",&n,&m)) {
if (1<=n && n<m && m<=MAX) break;
}
}
while (1) {
printf("Input t x(1<=t<=%d 1<=x<=%d):",MAX,n);
fflush(stdout);
rewind(stdin);
if (2==scanf("%d%d",&t,&x)) {
if (1<=t && t<=MAX && 1<=x && x<=n) break;
}
}
for (i=0;i<m;i++) md[i]='A'+i;
for (i=0;i<n;i++) nd[i]='a'+i;
k=0;
for (i=0;i<t;i++) {
printf("%2d: ",i+1);
for (j=0;j<n;j++) {
c=' ';
if (i==t-1 && j==x-1) {c='*';y=k+1;}
printf("%c%c%c",md[k],nd[j],c);
k=(k+1)%m;
}
printf("\n");
}
printf("%d\n",y);
}