题目:

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

代码解析:

package 课程;
import java.util.Stack;
import java.util.Scanner;
//Tseqqueue为泛型循环队列import 课程.Tseqqueue;public class dance {//跳舞分配  n为跳舞的次数public static void DancePartner(Person[] dancer, int n) {Tseqqueue<Person> Mdancers = new Tseqqueue<Person>();Tseqqueue<Person> Fdancers = new Tseqqueue<Person>();// 分男队列和女队列for (int i = 0; i < dancer.length; i++) {if (dancer[i].getSex().equals("M")) {Mdancers.EnQueue(dancer[i]);} else {Fdancers.EnQueue(dancer[i]);}}//跳舞分配int M = Mdancers.size();int F = Fdancers.size();int num = 0;Person pM;Person pF;while (num < n) {System.out.println("第" + (num + 1) + "轮跳舞:");for (int i = 0; i < Math.min(M, F); i++) {pM = Mdancers.DeQueue();Mdancers.EnQueue(pM);pF = Fdancers.DeQueue();Fdancers.EnQueue(pF);System.out.println("男士"+pM.getName() + "和" + "女士"+pF.getName() + "一起跳舞");}System.out.println("还有"+(Math.max(M, F)-Math.min(M, F))+"人等待跳舞");num++;}}//分组打印男女队 方法1  使用队列static public void FMgroup(String[] names, String[] sexs) {Tseqqueue<String> que = new Tseqqueue<String>();int num=0;System.out.println("男士:");for (int i = 0; i < names.length; i++) {if (sexs[i].equals("F")) {que.EnQueue(names[i]);} else {System.out.print(names[i]);}}System.out.println();System.out.println("女士:");que.print();}//分组打印男女队 方法2  使用两个栈static public void FMgroup2(String[] names, String[] sexs) {//使用stack存Stack<String> stack = new Stack<String>();Stack<String> stack2 = new Stack<String>();System.out.println("男士:");int num = 0;for (int i = 0; i < names.length; i++) {stack.push(names[i]);if (sexs[i].equals("M")) {System.out.print(stack.pop() + " ");} else {num++;}}System.out.println();System.out.println("女士:");for (int i = 0; i < num; i++) {stack2.push(stack.pop());}for (int i = 0; i < num; i++) {System.out.print(stack2.pop() + " ");}System.out.println();}public static void main(String[] args) {String[] names = { "张", "王", "李", "赵", "孙", "贾", "凉" };String[] sexs = { "F", "M", "M", "F", "M", "F", "M" };FMgroup(names, sexs);
//      FMgroup2(names, sexs);Person[] dancers = new Person[names.length];for (int i = 0; i < names.length; i++) {dancers[i] = new Person(names[i], sexs[i]);}Scanner sc = new Scanner(System.in);System.out.println("请输入跳舞的次数:");int n = sc.nextInt();DancePartner(dancers, n);}}class Person {private String name;private String sex;public Person(String name, String sex) {this.name = name;this.sex = sex;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}
}

提醒:

//Tseqqueue为泛型循环队列 我的Tseqqueue类如下:

package 课程;public class Tseqqueue<T> {private static int Maxsize = 5;public T data[];public int front,rear;public Tseqqueue() {this(Maxsize);}public Tseqqueue(int n) {front=rear=0;data = (T[])new Object[n];}public void EnQueue(T x) {if (isFull()) {addapacity();}rear = (rear+1) % data.length;data[rear] = x;}public T DeQueue() {if (isEmpty()) {System.out.println("empty");return null;}front = (front+1) % data.length;return data[front];}public void addapacity() {int i,j=1;if((rear+1)%data.length==front){T p[] = (T[])new Object[data.length << 1];if(rear==data.length-1) {for(i=1;i<=rear;i++) {p[i]=data[i];}}else {for(i=front+1;i<data.length;i++,j++) {p[j]=data[i];}for(i=0;i<=rear;i++,j++) {p[j]=data[i];}front=0;rear = j;}data=p;System.out.println("扩容成功 容量增加至"+data.length);}}public T Gethead() {return data[front+1%data.length];}public boolean isEmpty() {return rear == front;}public void print() {int j=front;for(int i=0;i<size();i++) {j = (j+1)%data.length;System.out.print(data[j]+" ");     }System.out.println();}public int size() {//        System.out.println("队列长为:" + (rear - front + data.length) % data.length);return (rear - front + data.length) % data.length;}public boolean isFull() {return front == (rear + 1) % data.length;}}

使用队列 模拟跳舞舞伴Java实现相关推荐

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

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

  2. 小白也能看懂的c语言队列入门问题——舞伴问题

    数据结构(舞伴问题)--队列问题解决 舞伴问题:假设在周末舞会上,男士们和女士们进入舞厅时,各自排成一队.跳舞开始时,依次从男队和女队的队头上各出一人配成舞伴.若两队初始人数不相同,则较长的那一队中未 ...

  3. java为什么不推荐使用stack_栈和队列的面试题Java实现,Stack类继承于Vector这两个类都不推荐使用...

    在 thinking in java中看到过说Stack类继承于Vector,而这两个类都不推荐使用了,但是在做一到OJ题时,我用LinkedList来模拟栈和直接用Stack,发现在进行入栈出栈操作 ...

  4. 【两个队列模拟栈】——栈与队列

    题目 用两个队列模拟实现栈的操作原题链接 思路 我是用两个list模拟的,没有用java的queue,下次用queue. 思想就是:元素进入一个list1,当list1中元素多余1个时,将list1的 ...

  5. 用队列模拟患者医院看病的过程

    1.用队列模拟患者医院看病的过程 部分函数请参考:https://blog.csdn.net/qq_50504109/article/details/120384457 /*** 模拟患者医院看病的过 ...

  6. 【学校实验】停车场问题:设停车场内只有一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。

    停车场问题 问题描述 测试数据 基本要求 实现提示 代码实现 栈的实现 队列的实现 主函数的实现 问题描述 设停车场内只有一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出.汽车在停车场内按车辆 ...

  7. 1276 士兵队列训练问题【队列模拟】

    士兵队列训练问题 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total S ...

  8. 【栈和队列专题】—— 双队列模拟栈

    LeetCode 225 : 用队列实现栈 队列 1.一些关于队列的基本操作 向队列中添加元素[3种方法] queue.add(value) queue.offer(value) queue.put( ...

  9. 【NOIP2016】蚯蚓 --队列模拟

    [NOIP2016]蚯蚓 话说去年这个题 我用priority_queue乱搞 结果惨不忍睹 q=0时送了50分 结果~~~~(>_<)~~~~ 每次弹出最长的蚯蚓 把它切开 在放回队列 ...

最新文章

  1. 2021年大数据Flink(二十二):Time与Watermaker
  2. python编程入门书籍推荐-给刚入门python的朋友推荐几本书
  3. C# static的用法详解
  4. 安卓在代码中设置TextView的drawableLeft、drawableRight、drawableTop、drawableBottom
  5. SharePoint学习札记[1] — WSS与MOSS的关系
  6. java浮点数四舍五入_Java小程序练习--浮点数的四舍五入
  7. 【转载】关于Python脚本开头两行的:#!/usr/bin/python和# -*- coding: utf-8 -*-的作用 – 指定文件编码类型...
  8. 苹果抛弃 OpenGL!
  9. modern php笔记---2.1、特性(命名空间、特性、性状)
  10. fedora 安装docker
  11. html 无组件上传图片,无组件上传图片到数据库中,最完整解决方案
  12. Feature selection using SelectFromModel
  13. Intel 实习mentor布置问题1
  14. 移动支付走入线下商家
  15. android毕业论文结论,毕业论文经典结束语
  16. 使用curl控制下载速度
  17. 洛谷 P1328 [NOIP2014 提高组] 生活大爆炸版石头剪刀布
  18. SpringBoot+OAuth2+JWT实现单点登录SSO完整教程,竟如此简单优雅!
  19. 4.19@深圳 | 品牌出海正当时,如何更有方向感?
  20. zookeeper中zoo.cfg配置文件参数解释,常用命令整理

热门文章

  1. 专项测试实战 | 如何测试 App 流畅度(基于 FPS 和丢帧率)?
  2. 1170. 比较字符串最小字母出现频次
  3. JAVA计算机毕业设计二手手机回收平台系统Mybatis+源码+数据库+lw文档+系统+调试部署
  4. 走出职业迷茫,做好未来规划
  5. CS5268规格书|CS5268功能介绍|TYPE-C转HDMI+VGA
  6. 个人介绍及未来学习规划
  7. windows 向 iPad导入文件
  8. 铅酸蓄电池三阶simulink仿真模型,可获得蓄电池充放电特性,并提供数学模型相关文献和多组电池模型参数。
  9. G6展示网络拓扑图,适配大数据量的方案
  10. 二段式FPGA的状态机