问题

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

解答

1 7
2 8
3 9
4 10
5
6

例如跳舞人员共十人,6男4女,那么配对情况应该像上面表格前4行那样,然后下一轮最先配对的应该是男5号。接着第二轮:

5 7
6 8
1 9
2 10
3
4

第二轮最先配对如上表,5号先与第一个女舞伴配对。然后下一轮最先配对应为男3号。

代码实现

#include <iostream>using namespace std;
#define OK 1
#define ERROR 0
#define MAXQSIZE 100typedef int Status;//舞伴问题
typedef struct
{char name[20];//名字char sex;//F为女性,M为男性
}person;//队列
typedef struct
{person* base;int front;//头指针int rear;//尾指针
}SqQueue;typedef person ElemType;//队列初始化
Status InitQueue(SqQueue& q)
{q.base = new person[MAXQSIZE];if (!q.base)exit(OVERFLOW);q.front = q.rear = 0;return OK;
}//求长度
int QueueLength(SqQueue* q)
{return(q->rear - q->front + MAXQSIZE) % MAXQSIZE;
}//判断是否为空
bool queue_empty(SqQueue& q)
{if (q.front == q.rear)return true;elsereturn false;
}//入队
Status 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;
}//出队(保留队头元素)
Status 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;
}//出队(不保留对头元素)
Status DeQueuee(SqQueue& q)
{if (q.front == q.rear)return ERROR;q.front = (q.front + 1) % MAXQSIZE;return OK;
}//取队头元素
person GetHead(SqQueue& q)
{if (q.rear != q.front){return q.base[q.front];}
}//舞伴问题解决
void dancer_solve(person dancer[], int num,int m, SqQueue male,SqQueue female)
{/*SqQueue male, female;InitQueue(male);InitQueue(female);*/for (int j = 0; j < m; j++){cout << "第" << j + 1 << "轮:" << endl;for (int i = 0; i < num; i++){if (dancer[i].sex == 'F')EnQueue(female, dancer[i]);elseEnQueue(male, dancer[i]);}cout << "The dancing partners are:\n";while (!queue_empty(male) && !queue_empty(female)){person p;DeQueue(male, p);cout << p.name << ' ';DeQueue(female, p);cout << p.name << endl;}person e;if (!queue_empty(female)){e = GetHead(female);cout << "The first woman to get a partner is:" << e.name << endl;}else if (!queue_empty(male)){e = GetHead(female);cout << "The first man to get a partner is:" << e.name << endl;}}
}//主函数
int main()
{int n;cout << "请输入跳舞人的人数:";cin >> n;person *dancer = new person[n];cout << "请依次输入跳舞人的信息:" << endl;for (int i = 0; i < n; i++){cout << "name:";cin >> dancer[i].name;cout << "sex:";cin >> dancer[i].sex;}int m;cout << "请输入舞会的轮数:";cin >> m;SqQueue male, female;InitQueue(male);InitQueue(female);dancer_solve(dancer, n,m, male, female);return 0;
}

舞伴问题(循环队列)相关推荐

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

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

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

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

  3. 【C++】多线程(链式、循环队列)实现生产者消费者模式

    生产者消费者模式:         生产者消费者问题(英语:Producer-consumer problem),也称有限缓冲问题(英语:Bounded-buffer problem),是一个多线程同 ...

  4. 数据结构与算法(3-2)队列(顺序队列、循环队列与链队列)

    目录 一.顺序队列 1.存储结构 2.入队和出队 总代码 二.循环队列 总代码: 三.链队列 1.存储结构 2.入队和出队 总代码 一.顺序队列 队列特征:先进后出.后进后出. 1.存储结构 //队列 ...

  5. 原生js循环展示dom_【前端面试】用一道题讲 js 的事件循环队列

    昨天去面了滴滴,一口气面了三面,考了 promise 和事件循环.之前的猿辅导也考察了这些,几乎所有的大厂中厂都一定会考原生 js 的事件循环队列. 今天,我把昨天考察的原题拿出来分析一下. setT ...

  6. 【数据结构】顺序循环队列及其实现(C语言)

    给定一个大小为MAXSIZE的数组储存一个队列,经过若干次的插入和删除以后,当队尾指针 rear = MAXSIZE 时,呈现队列满的状态,而事实上数组的前部可能还有空闲的位置.为了有效地利用空间,引 ...

  7. 【Java】 LeetCode 622. 设计循环队列 (有关实现循环队列的讲解)

    题目: 设计你的循环队列实现. 循环队列是一种线性数据结构,其操作表现基于 FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循环.它也被称为"环形缓冲器". 循环队列的一 ...

  8. 第3关:单链表循环队列

    #ifndef queue__h #define queue__h#include <iostream>struct Node // 数据节点 {int data; // 数据类型Node ...

  9. 循环队列,定义循环队列长度为10,编写初始化队列、入队、出队、求队长,实现10,20,30,40,50,60,70,80入队,10,20,30出队,56,67入队的算法功能。

    循环队列,定义循环队列长度为10,编写初始化队列.入队.出队.求队长,实现10,20,30,40,50,60,70,80入队,10,20,30出队,56,67入队的算法功能. #include< ...

  10. 【swjtu】数据结构实验3_基于循环队列的排队买票模拟程序

    实验内容及要求: 编程建立循环队列存储结构,对排队买票过程进行模拟.要求程序在控制台屏幕上显示字符菜单: 1. 排队--输入新到达的买票人姓名,加入买票队列中: 2. 售票--排队队列中最前面的人购票 ...

最新文章

  1. mysql导入数据出现Errcode: 2 - No such file or directory错误信息
  2. TCP/IP 总结一
  3. build 之前执行task_一次NPM前端项目的CI-Build速度优化
  4. 页面性能优化参考建议
  5. Spring AOP(通知、连接点、切点、切面)
  6. 【CodeForces - 803D】Magazine Ad(二分答案)
  7. 『飞秋』在ASP.NET服务器端过程中使用WebBrowser的注意事项
  8. JDK+Tomcat+MySql环境配置—linux
  9. Hbase如何实现增删查改?
  10. 济宁a货翡翠,芜湖a货翡翠
  11. C++ error: use of deleted function ‘std::atomic<short unsigned int>::atomic(const std::atomic<short
  12. ipq4019 kernel 报错spi-nand spi0.1: spi transfer failed: -110
  13. python 教程 w3 school_Python 模块 | w3cschool菜鸟教程
  14. U深度-重装电脑系统
  15. excel 某个单元格不是等于空值,Excel返回第一个与所有非空单元格及统计数量,把空单元格替换为0...
  16. STM32程序烧录方式总结
  17. Project使用总结-如何统计项目总工时,设置Project起始日期,修改项目日期格式
  18. (免费分享)springboot论坛bbs系统
  19. 微信公众号h5分享到朋友圈,超详细的讲解
  20. 关于Arcgis用excel导入坐标点位置不对的解决方式

热门文章

  1. 微信生成带头像二维码
  2. 什么是胆汁酸,其与肠道微生物互作如何影响人体健康
  3. Python类中的self是什么意思?
  4. kafka-groupid
  5. Linux入门-常见指令
  6. 【算法学习】最小生成树
  7. 条形码计算机工作原理视频,条形码的工作原理
  8. Python基础——基础分支和循环
  9. 网购代下单 省钱新主张
  10. IAP( 应用程序內购买): 完全攻略