题目描述
一班有 n个学生,有女生 ,也有 男生,现要开一个舞会 。 男女生分别编号坐在舞池的两边的椅子上 。每曲开始时 ,依次从男生和女中各出一人配对跳舞。
舞会开始前,男生和女生会分别按顺序排成2个队列,跳舞时,会不断从男队和女队选择队首队员配成舞伴,直到某队队员全部配完。依次输出各对舞伴的名字。若某队还有剩余队员未配对,则输出剩余队员的队首队员姓名。
输入
首先输入一个n,表示学生总数。1<=n<=100.
然后有n行,每行输入一个学生的姓名和性别。姓名是长度小于20的字符串,性别用字符‘F'和'M'表示,其中'F'表示女生,'M'表示男生。
输出
输出配对的舞伴双方姓名及未配对的首位学生姓名。格式见样例。
样例输入 Copy
8 nameA F nameB M nameC M nameD F nameE F nameF M nameG M nameH M
样例输出 Copy
nameA & nameB nameD & nameC nameE & nameF nameG
#include <cstdio>
#include <string>
#include <queue>
using namespace std;
int main()
{
int i, n;
scanf("%d", &n);
char name[100], sex[100];
queue <string> male, female;
for (i = 0; i < n; i++)
{
scanf("%s%s", name, sex);
if (sex[0] == 'M')
{
male.push(name);
}
else
{
female.push(name);
}
}
for (i = 0; i < n; i++)
{
if (female.empty() && male.empty())
{
break;
}
if (female.empty())
{
printf("%s\n", male.front().c_str());
break;
}
if (male.empty())
{
printf("%s\n", female.front().c_str());
break;
}
printf("%s & %s\n", female.front().c_str(), male.front().c_str());
female.pop();
male.pop();
}
return 0;
}
c(配合c++)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define OK 0
#define ERROR -1
typedef int Status;
typedef char *QElemType;
typedef struct QNode
{
QElemType data;
struct QNode *next;
} QNode, *QueuePtr;
typedef struct
{
QueuePtr front;
QueuePtr rear;
} LinkQueue;
Status InitQueue(LinkQueue *q)
{
QueuePtr p = (QueuePtr)malloc(sizeof(QNode));
if (p == NULL)
{
return ERROR;
}
q->front = q->rear = p;
q->front->next = NULL;
return OK;
}
Status QueueEmpty(LinkQueue q)
{
if (q.front == q.rear)
return OK;
else
return ERROR;
}
int QueueLength(LinkQueue q)
{
QueuePtr p, k;
p = k = (QueuePtr)malloc(sizeof(QNode));
if (p == NULL)
{
return ERROR;
}
p = q.front->next;
k = q.rear;
int length = 0;
if (k == NULL)
return ERROR;
else
{
while(p!=NULL)
{
length++;
p=p->next;
}
}
return length;
}
Status EnQueue(LinkQueue *q, QElemType e)
{
QueuePtr p = (QueuePtr)malloc(sizeof(QNode));
if (p == NULL)
{
return ERROR;
}
p->data = e;
p->next = NULL;
q->rear->next = p;
q->rear = p;
return OK;
}
Status DeQueue(LinkQueue *q, QElemType *e)
{
QueuePtr p = NULL;
if (q->front == q->rear)
return ERROR;
p = q->front->next;
*e = p->data;
q->front->next = p->next;
if (q->front->next == NULL)
{
q->rear = q->front;
}
free(p);
return OK;
}
int main(void)
{
int i, n;
char name[100], sex[100];
char *pname = NULL;
char *pname2 = NULL;
LinkQueue male, female;
Status status, status2;
status = InitQueue(&male);
if (status == ERROR)
{
return EXIT_FAILURE;
}
status = InitQueue(&female);
if (status == ERROR)
{
return EXIT_FAILURE;
}
scanf("%d", &n);
for (i = 0; i < n; i++)
{
scanf("%s%s", name, sex);
pname = (char *)malloc(strlen(name) + 1);
if (pname == NULL)
{
return EXIT_FAILURE;
}
strcpy(pname, name);
if (sex[0] == 'M')
{
status = EnQueue(&male, pname);
if (status == ERROR)
{
return EXIT_FAILURE;
}
}
else
{
status = EnQueue(&female, pname);
if (status == ERROR)
{
return EXIT_FAILURE;
}
}
}
for (i = 0; i < n; i++)
{
status = QueueEmpty(female);
status2 = QueueEmpty(male);
if (status == OK && status2 == OK)
{
break;
}
if (status == OK)
{
DeQueue(&male, &pname);
printf("%s\n", pname);
free(pname);
break;
}
if (status2 == OK)
{
DeQueue(&female, &pname);
printf("%s\n", pname);
free(pname);
break;
}
DeQueue(&female, &pname);
DeQueue(&male, &pname2);
printf("%s & %s\n", pname, pname2);
free(pname);
free(pname2);
}
return 0;
}