问题 J: 舞伴问题
题目描述
一班有 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: 舞伴问题相关推荐
- c语言 循环队列实现舞伴匹配
题目: 循环队列的应用:舞伴配对 1.在舞会上男女各自排成一队,舞会开始时每一次从男队和女队的对头各出一人配成舞伴, 直到某队为空,如果两队初始人数不等,则较长的那一队中未配对者等待下一轮舞曲. 某轮 ...
- 舞伴问题数据结构java_Gale-Shapley算法解决舞伴问题过程详解(C++实现)
舞伴问题是这样的:有 n 个男孩与 n 个女孩参加舞会,每个男孩和女孩均交给主持一个名单,写上他(她)中意的舞伴名字.无论男孩还是女孩,提交给主持人的名单都是按照偏爱程度排序的,排在前面的都是他们最中 ...
- JZOJ 3632. 【汕头市选2014】舞伴
Description N 个男孩,N 个女孩,男孩和女孩可能是朋友,也可能不是朋友.现在要组成N 对舞伴,要求每对舞 伴都是一男一女,且他们是朋友. 统计不同配对方案的数量,因为结果很大,所以只要求 ...
- 舞伴配对问题java_舞伴配对问题
循环队列的应用--舞伴配对问题:在舞会上,男.女各自排成一队.舞会开始时,依次从男队和女队的队头各出一人配成舞伴.如果两队初始人数不等,则较长的那一队中未配对者等待下一轮舞曲.假设初始男.女人数及性别 ...
- 循环队列的应用——舞伴配对问题:在舞会上,男、女各自排成一队。舞会开始时,依次从男队和女队的队头各出一人配成舞伴。如果两队初始人数不等,则较长的那一队中未配对者等待下一轮舞曲。假设初始男、女人数及性别
欢迎加qq群:453398542 学习讨论,会定期分享资料课程,解答问题. 循环队列的应用--舞伴配对问题:在舞会上,男.女各自排成一队.舞会开始时,依次从男队和女队的队头各出一人配成舞伴.如果两队初 ...
- 使用队列 模拟跳舞舞伴Java实现
题目: 假设在周末舞会上,男士们和女士们进入舞厅时,各自排成一队. 和女队的队头上各出一人配成舞伴.若两队初始人数不相同,则较长的一队未配对者等待下一轮舞曲,现要求写一算法模拟上述舞伴配对问题. 代码 ...
- 顺序队列的基本操作的实现及舞伴问题
实验内容:队列 实验题目: 顺序队列的基本操作的实现及舞伴问题 一.实验目的 1.深入了解队列的定义和特性. 2.掌握队列的数组表示.链表表示以及相应操作的实现,巩固对这两种结构的构造方法的掌握 ...
- 数据结构(舞伴问题)
舞伴问题(队列) 假设在周末舞会上,男士和女士进入舞厅时,各自排成一队.跳舞开始时,依次从男队和女队的队头上各出一个配成舞伴.若两队初始人数不相同,则较长的那一队中未配对者等待下一轮舞曲. 编写程序模 ...
- 舞伴问题(循环队列)
问题 问题描述:在舞会上,男.女各自排成一队.舞会开始时.依次从男队和女队的队头各出一人配成舞伴.如果两队初始人数不等,则较长的那一队中未配对者等待下一轮舞曲.初始男.女人数及性别已经固定,舞会的轮数 ...
最新文章
- linux 下删除文件夹(文件夹不为空时)
- javafx隐藏_JavaFX技巧14:StackPane子项-隐藏但不消失
- mysql 为数据表添加字段_MySQL数据表添加字段实例
- PHP:Iterator(迭代器)接口和生成器
- crontrigger java,CronTrigger
- CUBRID学习笔记 46 PREPARED set Do
- 所有的 iPhone 都已经被破解了!
- Ubuntu18.04之搜狗输入法
- Python内置函数(66)——vars
- High Score
- ui设计网站资料大全,你想要的都有
- 如何通过给MM修电脑培养感情
- 阿迪达斯智能运营中心在苏州工业园区开工建设;信达生物任命生物医药科学家刘勇军为集团总裁 | 美通企业日报...
- 常见安全漏洞及其解决方案
- WordCount 官方源码解读及工程代码
- DBeaver添加SQLserver数据库提示需要下载驱动
- Java学习之路-----Java基础简介,基础语法,Java标识符,修饰符,关键字与注释
- variable ‘XXX cannot be implicitly captured in a lambda with no capture-default specified
- Flutter之微信支付实战模板
- DBA呢?我的数据库又双叒叕连不上了!
热门文章
- 【node版本与glup版本不兼容】primordials is not defined及Task function must be specified
- linux for循环套for循环格式_为什么for循环和aes八字不合
- JoinPoint 对象
- c#语言float转换int,c#中怎么把int向float型转换?
- 技巧: 根据背景色自适应文本颜色
- Java学习-IO流-打印流
- 在Linux搭建Kafka集群
- 金九银十北漂记第4篇:面试方欣科技
- OpenSCAD 建模:相框
- 1+X web前端理论考试:html js css jq题