队列处理舞会配对问题
舞伴配对问题。假设在大学生的周末舞会上,男、女学生各自排成
一队。舞会开始时,依次从男队和女队的队头各出一人配成舞伴。
如果两队初始人数不等,则较长的那一队中未配对者等待下一轮舞
曲。要求男、女学生人数及其姓名以及舞会的轮数由用户从键盘输
入,屏幕输出每一轮舞伴的配对名单,如果在该轮中有未配对的,
则要求能够从屏幕显示下一轮第一个出场的未配对者姓名。
思路:首先就是定义两个字符队列,将男女生姓名存入进去,后面还是遍历,需要按男女生人数少的那部分来,一次配对以后,人数多的那一个输出未配对人姓名。
注意每轮舞会配对结束,需要将已经配对的人插入到队列末尾,以便进行下次遍历。
代码如下:
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<String> 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<String> 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();}
}