【算法题】分班

  • A+
所属分类:编程茶楼


共计 1537 个字符,预计需要花费 4 分钟才能阅读完成。

幼儿园两个班的小朋友在排队时混在了一起,每位小朋友都知道自己是否与前面一位小朋友是否同班,请你帮忙把同班的小朋友找出来。
小朋友的编号为整数,与前一位小朋友同班用Y表示,不同班用N表示。

输入为:空格分开的小朋友编号和是否同班标志。
比如:6/N 2/Y 3/N 4/Y,表示共4位小朋友,2和6同班,3和2不同班,4和3同班。
其中,小朋友总数不超过999,每个小朋友编号大于0,小于等于999。
不考虑输入格式错误问题。
输出为:两行,每一行记录一个班小朋友的编号,编号用空格分开。且:
编号需要按照大小升序排列,分班记录中第一个编号小的排在第一行。
若只有一个班的小朋友,第二行为空行。
若输入不符合要求,则直接输出字符串ERROR。

示例1

输入
1/N 2/Y 3/N 4/Y
输出
1 2
3 4
说明
2的同班标记为Y,因此和1同班。
3的同班标记为N,因此和1、2不同班。
4的同班标记为Y,因此和3同班。
所以1、2同班,3、4同班,输出为
1 2
3 4

import java.util.ArrayList;
import java.util.Comparator;
import java.util.Scanner;

/**
 * @since 2022年4月18日
 */
public class DivideClass {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String teamStr = scanner.nextLine();

        String[] childs = teamStr.split(" ");
        if (childs.length > 999) {
            System.out.println("ERROR");
        }
        // 分开两个班级
        ArrayList<String> classA = new ArrayList<>();
        ArrayList<String> classB = new ArrayList<>();
        String classNum = "";
        for (int i = 0; i < childs.length; i++) {
            if (i == 0) {
                String first = childs[0];
                classA.add(first.split("/")[0]);
                classNum = "A";
                continue;
            }
            String follow = childs[i];
            boolean isSameClass = follow.endsWith("Y");
            String stu = follow.split("/")[0];
            if ("A".equals(classNum)) {
                if (isSameClass) {
                    classA.add(stu);
                } else {
                    classB.add(stu);
                }
                classNum = isSameClass ? "A" : "B";
            } else {
                if (isSameClass) {
                    classB.add(stu);
                } else {
                    classA.add(stu);
                }
                classNum = isSameClass ? "B" : "A";
            }
        }

        classA.sort(Comparator.comparingInt(Integer::parseInt));
        classB.sort(Comparator.comparingInt(Integer::parseInt));

        System.out.println(classA.toString().replace("[", "").replace("]", "").replace(",", " "));
        System.out.println(classB.toString().replace("[", "").replace("]", "").replace(",", " "));
    }
}
  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: