[华为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;
        }
    }
}

验证:

相关推荐
嵌入式学习菌5 天前
【AI面板识别】
华为od
小林rr7 天前
【华为OD机考】2024E+D卷真题【完全原创题解 详细考点分类 不断更新题目 六种主流语言Py+Java+Cpp+C+Js+Go】
java·c语言·华为od
郝晨妤8 天前
[HarmonyOS]鸿蒙(添加服务卡片)推荐商品 修改卡片UI(内容)
华为od·华为·harmonyos·鸿蒙
油泼辣子多加10 天前
【华为OD机考】华为OD笔试真题解析(7)--基站维修工程师
算法·华为od
CodeClimb14 天前
【华为OD-E卷 - 120 分割数组的最大差值 100分(python、java、c++、js、c)】
java·javascript·c++·python·华为od
执着的小火车15 天前
【2024华为OD-E卷-100分-箱子之字形摆放】((题目+思路+Java&C++&Python解析)
java·数据结构·算法·华为od
执着的小火车16 天前
【2024华为OD-E卷-100分-日志排序】((题目+思路+Java&C++&Python解析)
数据结构·算法·华为od·华为
CodeClimb16 天前
【华为OD-E卷 - 113 跳格子2 100分(python、java、c++、js、c)】
java·javascript·c++·python·华为od
无限码力17 天前
最大矩阵的和
数据结构·算法·华为od·笔试·华为od e卷真题
CodeClimb18 天前
【华为OD-E卷 - 115 数组组成的最小数字 100分(python、java、c++、js、c)】
java·javascript·c++·python·华为od