机场航班调度程序 - 华为OD统一考试(D卷)

OD统一考试(D卷)

分值: 100分

题解: Java / Python / C++

华为od机试题库

题目描述

XX市机场停放了多架飞机,每架飞机都有自己的航班号CA3385,CZ6678,SC6508等,航班号的前2个大写字母(或数字)代表航空公司的缩写,后面4个数字代表航班信息。

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

为保障航班的有序起飞,调度员首先按照航空公司的缩写(航班号前2个字母)对所有航班进行排序,同一航空公司的航班再按照航班号的后4个数字进行排序最终获得安排好的航班的起飞顺序。

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

说明:

1、航空公司缩写排序按照从特殊符号$ & *, 0~9,A~Z排序;

输入描述

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

CA3385,CZ6678,SC6508,DU7523,HK4456,MK0987

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

输出描述

CA3385,CZ6678,DU7523,HK4456,MK0987,SC6508

示例1

输入:
CA3385,CZ6678,SC6508,DU7523,HK4456,MK0987

输出:
CA3385,CZ6678,DU7523,HK4456,MK0987,SC6508

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

示例2

输入:
MU1087,CA9908,3U0045,FM1703

输出:
3U0045,CA9908,FM1703,MU1087

题解

理解了题意之后,可以直接利用排序函数sort,只需要根据航班号的整体顺序进行排序,因为前两个字符和后四个字符的排序顺序一致。我们可以直接利用默认的字符串排序函数来进行排序。

解题思路

  1. 读取输入并解析为一个字符串向量。
  2. 直接使用标准库的sort函数对字符串向量进行排序。
  3. 输出排序后的结果。

Java

import java.util.*;
/**
 * @author code5bug
 */
public class Main {
    public static void main(String[] args) {
        // 创建Scanner对象以从标准输入读取数据
        Scanner scanner = new Scanner(System.in);

        // 读取一行输入
        String line = scanner.nextLine();

        // 使用逗号分割输入字符串
        String[] items = line.split(",");

        // 将字符串数组转换为ArrayList
        List<String> planes = new ArrayList<>();
        for(String plane : items){
            planes.add(plane.trim());
        }

        // 对ArrayList中的字符串进行排序
        Collections.sort(planes);

        // 输出排序后的结果
        String result = String.join(",", planes);
        System.out.println(result);
    }
}

Python

# 存储飞机名称
planes = [plane.strip() for plane in input().split(',')]
# 排序
planes.sort()
# 输出排序后的结果
print(",".join(cars))

C++

#include <bits/stdc++.h>
using namespace std;

int main()
{
    vector<string> planes;   // 定义一个字符串向量,用于存储飞机名称
    string         line;     // 定义一个字符串变量,用于存储输入行
    cin >> line;             // 从标准输入读取一行字符串
    stringstream ss(line);   // 用输入行初始化字符串流

    string item;   // 定义一个字符串变量,用于存储被分割的子字符串
    while (getline(ss, item, ',')) {   // 使用逗号作为分隔符逐个读取子字符串
        planes.push_back(item);        // 将读取的子字符串添加到向量中
    }

    sort(planes.begin(), planes.end());   // 对向量中的字符串进行排序

    // 输出排序后的结果
    cout << planes[0];
    for (int i = 1; i < planes.size(); i++) cout << "," << planes[i];
    cout << endl;   // 输出换行符
}

希望这个专栏不仅能帮您成功通过华为机试,还能让您熟练掌握算法。

🙏整理题解不易, 如果有帮助到您,请给点个赞 ‍❤️‍ 和收藏 ⭐,让更多的人看到。🙏🙏🙏

#华为od##华为od题库##华为##面经##秋招#
全部评论
const strToChar = (s) => { return s .split("") .map((i) => i.charCodeAt()) .join(""); }; /** * 机场航班调度程序 * @param {string} s */ const handler = (s) => { const list = s.split(","); return list.sort((a, b) => strToChar(a) - strToChar(b)).join(); }; console.log(handler("CA3385,CZ6678,SC6508,DU7523,HK4456,MK0987"));
点赞 回复 分享
发布于 03-16 18:30 河南

相关推荐

04-11 23:51
门头沟学院 Java
坚定的芭乐反对画饼_许愿Offer版:人人都能过要面试干嘛,发个美团问卷填一下,明天来上班不就好了
点赞 评论 收藏
分享
评论
5
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务