[华为OD]C卷 机场航班调度 ,XX市机场停放了多架飞机,每架飞机都有自己的航班号100

题目:

XX市机场停放了多架飞机,每架飞机都有自己的航班号CA3385, CZ6678, SC6508

等,航班号的前2个大写字母(或数字)代表航空公司的缩写,后面4个数字代表航班信息。

但是XX市机场只有一条起飞用跑道,调度人员需要安排目前停留在机场的航班有序起

飞。为保障航班的有序起飞,调度员首先按照航空公司的缩写(航班号前2个字母)对所有航班

进行排序,同一航空公司的航班再按照航班号的后4个数字进行排序最终获得安排好的航班的

起飞顺序。

请编写一段代码根据输入的航班号信息帮助调度员输出航班的起飞顺序。航空公司缩写排

序按照从特殊符号$ & *,0~9,A~Z排序;

输入描述

第一行输入航班信息,多个航班号之间用逗号(",")分隔,输入的航班号不超过100个

例如:

CA3385,CZ6678,SC6508,DU7523,HK4456,MK0987

备注:航班号为6位长度,后4位为纯数字,不考虑存在后4位重复的Q场号

输出描述

CA3385,CZ6678/ DU7523,HK4456,MK0987,SC6508

示例1:

输入

CA3385,CZ6678,SC6508,DU7523,HK4456,MK987

输出

CA3385,CZ6678/ DU7523,HK4456,MK0987,SC6508

说明

输入目前停留在该机场的航班号,输出为按照调度排序后输出的有序的航班号

示例2:

输入

MU1087,CA9908,3U0045,FM1703

输出

3U0045,CA9908,FM1703,MU1087

题解:

明显的自定义排序,也就是把字符串前两个单独比较,后面的再比较,所以可以自定义对象,把字符串前两个和后续拆开进行比较。这个题目中前面缩写排序,和实际字符对应的ascii码排序是一致的,所以可以直接用字符串比较就可以了(如果不一致的话,就需要自己来写比较方案了,那样的话可以定义一个hashMap来弄也可以)

代码:

java 复制代码
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;

public class Flight {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        if(!sc.hasNextLine()){
            return;
        }
        String[] flightInfo = sc.nextLine().split(",");
        List<FlightName> flightNameList = new ArrayList<>();
        for(int i=0;i<flightInfo.length;i++){
            FlightName flightName = new FlightName(flightInfo[i].substring(0,2)
                    ,flightInfo[i].substring(2));
            flightNameList.add(flightName);
        }

        Collections.sort(flightNameList);

        StringBuilder sb = new StringBuilder();
        for(int i =0;i<flightNameList.size();i++){
            if(i !=0){
                sb.append(",");
            }
            sb.append(flightNameList.get(i).getFlightName());
        }
        System.out.println(String.valueOf(sb));


    }

    public static class FlightName implements Comparable<FlightName>{
        private String prefix;
        private String flightNum;


        public FlightName(String prefix, String flightNum) {
            this.prefix = prefix;
            this.flightNum = flightNum;
        }

        @Override
        public int compareTo(FlightName o){
            if(o.prefix.equals(this.prefix)){
                return o.flightNum.compareTo(this.flightNum);
            }
            else {
                return this.prefix.compareTo(o.prefix);
            }
        }

        public String getFlightName(){
            return this.prefix+this.flightNum;
        }
    }
}

验证:

相关推荐
什码情况2 天前
回文时间 - 携程机试真题题解
数据结构·python·算法·华为od·机试
蓝白咖啡3 天前
华为OD机试 - 王者荣耀匹配机制 - 回溯(Java 2024 D卷 200分)
java·python·算法·华为od·机试
郝晨妤9 天前
鸿蒙常见面试题(欢迎投稿一起完善持续更新——已更新到62)
服务器·javascript·华为od·华为·harmonyos·鸿蒙
程序员yt12 天前
西交建筑学本科秋天毕业想转码,自学了Python+408,华为OD社招还是考研更香?
python·考研·华为od
CodeClimb14 天前
【华为OD-E卷 - 单词接龙 100分(python、java、c++、js、c)】
java·javascript·c++·python·华为od
猿六凯15 天前
2024山东大学计算机复试上机真题
华为od
猿六凯17 天前
2024浙江大学计算机考研上机真题
考研·华为od
猿六凯18 天前
2023南京理工大学计算机复试上机真题
华为od
猿六凯18 天前
2023华东师范大学计算机复试上机真题
算法·华为od
猿六凯18 天前
历年云南大学计算机复试上机真题
java·华为od·华为