题目描述

一班有 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 -1typedef 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;elsereturn 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;
}

问题 J: 舞伴问题相关推荐

  1. c语言 循环队列实现舞伴匹配

    题目: 循环队列的应用:舞伴配对 1.在舞会上男女各自排成一队,舞会开始时每一次从男队和女队的对头各出一人配成舞伴, 直到某队为空,如果两队初始人数不等,则较长的那一队中未配对者等待下一轮舞曲. 某轮 ...

  2. 舞伴问题数据结构java_Gale-Shapley算法解决舞伴问题过程详解(C++实现)

    舞伴问题是这样的:有 n 个男孩与 n 个女孩参加舞会,每个男孩和女孩均交给主持一个名单,写上他(她)中意的舞伴名字.无论男孩还是女孩,提交给主持人的名单都是按照偏爱程度排序的,排在前面的都是他们最中 ...

  3. JZOJ 3632. 【汕头市选2014】舞伴

    Description N 个男孩,N 个女孩,男孩和女孩可能是朋友,也可能不是朋友.现在要组成N 对舞伴,要求每对舞 伴都是一男一女,且他们是朋友. 统计不同配对方案的数量,因为结果很大,所以只要求 ...

  4. 舞伴配对问题java_舞伴配对问题

    循环队列的应用--舞伴配对问题:在舞会上,男.女各自排成一队.舞会开始时,依次从男队和女队的队头各出一人配成舞伴.如果两队初始人数不等,则较长的那一队中未配对者等待下一轮舞曲.假设初始男.女人数及性别 ...

  5. 循环队列的应用——舞伴配对问题:在舞会上,男、女各自排成一队。舞会开始时,依次从男队和女队的队头各出一人配成舞伴。如果两队初始人数不等,则较长的那一队中未配对者等待下一轮舞曲。假设初始男、女人数及性别

    欢迎加qq群:453398542 学习讨论,会定期分享资料课程,解答问题. 循环队列的应用--舞伴配对问题:在舞会上,男.女各自排成一队.舞会开始时,依次从男队和女队的队头各出一人配成舞伴.如果两队初 ...

  6. 使用队列 模拟跳舞舞伴Java实现

    题目: 假设在周末舞会上,男士们和女士们进入舞厅时,各自排成一队. 和女队的队头上各出一人配成舞伴.若两队初始人数不相同,则较长的一队未配对者等待下一轮舞曲,现要求写一算法模拟上述舞伴配对问题. 代码 ...

  7. 顺序队列的基本操作的实现及舞伴问题

    实验内容:队列   实验题目:  顺序队列的基本操作的实现及舞伴问题 一.实验目的 1.深入了解队列的定义和特性. 2.掌握队列的数组表示.链表表示以及相应操作的实现,巩固对这两种结构的构造方法的掌握 ...

  8. 数据结构(舞伴问题)

    舞伴问题(队列) 假设在周末舞会上,男士和女士进入舞厅时,各自排成一队.跳舞开始时,依次从男队和女队的队头上各出一个配成舞伴.若两队初始人数不相同,则较长的那一队中未配对者等待下一轮舞曲. 编写程序模 ...

  9. 舞伴问题(循环队列)

    问题 问题描述:在舞会上,男.女各自排成一队.舞会开始时.依次从男队和女队的队头各出一人配成舞伴.如果两队初始人数不等,则较长的那一队中未配对者等待下一轮舞曲.初始男.女人数及性别已经固定,舞会的轮数 ...

最新文章

  1. linux 下删除文件夹(文件夹不为空时)
  2. javafx隐藏_JavaFX技巧14:StackPane子项-隐藏但不消失
  3. mysql 为数据表添加字段_MySQL数据表添加字段实例
  4. PHP:Iterator(迭代器)接口和生成器
  5. crontrigger java,CronTrigger
  6. CUBRID学习笔记 46 PREPARED set Do
  7. 所有的 iPhone 都已经被破解了!
  8. Ubuntu18.04之搜狗输入法
  9. Python内置函数(66)——vars
  10. High Score
  11. ui设计网站资料大全,你想要的都有
  12. 如何通过给MM修电脑培养感情
  13. 阿迪达斯智能运营中心在苏州工业园区开工建设;信达生物任命生物医药科学家刘勇军为集团总裁 | 美通企业日报...
  14. 常见安全漏洞及其解决方案
  15. WordCount 官方源码解读及工程代码
  16. DBeaver添加SQLserver数据库提示需要下载驱动
  17. Java学习之路-----Java基础简介,基础语法,Java标识符,修饰符,关键字与注释
  18. variable ‘XXX cannot be implicitly captured in a lambda with no capture-default specified
  19. Flutter之微信支付实战模板
  20. DBA呢?我的数据库又双叒叕连不上了!

热门文章

  1. 【node版本与glup版本不兼容】primordials is not defined及Task function must be specified
  2. linux for循环套for循环格式_为什么for循环和aes八字不合
  3. JoinPoint 对象
  4. c#语言float转换int,c#中怎么把int向float型转换?
  5. 技巧: 根据背景色自适应文本颜色
  6. Java学习-IO流-打印流
  7. 在Linux搭建Kafka集群
  8. 金九银十北漂记第4篇:面试方欣科技
  9. OpenSCAD 建模:相框
  10. 1+X web前端理论考试:html js css jq题