队列处理舞会配对问题

舞伴配对问题。假设在大学生的周末舞会上,男、女学生各自排成

一队。舞会开始时,依次从男队和女队的队头各出一人配成舞伴。

如果两队初始人数不等,则较长的那一队中未配对者等待下一轮舞

曲。要求男、女学生人数及其姓名以及舞会的轮数由用户从键盘输

入,屏幕输出每一轮舞伴的配对名单,如果在该轮中有未配对的,

则要求能够从屏幕显示下一轮第一个出场的未配对者姓名。

思路:首先就是定义两个字符队列,将男女生姓名存入进去,后面还是遍历,需要按男女生人数少的那部分来,一次配对以后,人数多的那一个输出未配对人姓名。

注意每轮舞会配对结束,需要将已经配对的人插入到队列末尾,以便进行下次遍历。

代码如下:

import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;

public class Solution18{
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.println("男队:");
        System.out.println("输入跳舞人数:");
        int numMales = scanner.nextInt();
        Queue males = new LinkedList<>();
        System.out.println("输入跳舞者的姓名:");
        for (int i = 0; i < numMales; i++) {
            males.add(scanner.next());
        }

        System.out.println("女队:");
        System.out.println("输入跳舞人数:");
        int numFemales = scanner.nextInt();
        Queue females = new LinkedList<>();
        System.out.println("输入跳舞者的姓名:");
        for (int i = 0; i < numFemales; i++) {
            females.add(scanner.next());
        }

        System.out.println("请输入舞会的轮数:");
        int rounds = scanner.nextInt();

        for (int round = 1; round <= rounds; round++) {
            System.out.println("第 " + round + " 轮配对名单:");

            int pairs = Math.min(males.size(), females.size());
            for (int i = 0; i < pairs; i++) {
                String male = males.poll();
                String female = females.poll();
                System.out.println(male + " 与 " + female + " 配对");
                males.add(male); // 将配对过的男生重新加入队列末尾
                females.add(female); // 将配对过的女生重新加入队列末尾
            }

            if (!males.isEmpty() && males.size() > pairs) {
                System.out.println("下一轮首位未配对男生:" + males.peek());
            }

            if (!females.isEmpty() && females.size() > pairs) {
                System.out.println("下一轮首位未配对女生:" + females.peek());
            }
        }

        scanner.close();
    }
}

你可能感兴趣的:(算法,java,开发语言)