最新华为OD机试真题-机场航班调度程序(100分)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员

✨ 本系列打算持续跟新 华为OD机试-D卷 的三语言AC题解

👏 感谢大家的订阅➕ 和 喜欢💗

📎在线评测链接

=>机场航班调度程序(100分)<=

华为OD

🌍 评测功能需要 =>订阅专栏<= 后联系清隆解锁~

🍓OJ题目截图

alt

✈️ 机场航班调度程序

问题描述

市机场,停放了多架飞机,每架飞机都有自己的航班号,例如 等。航班号的前 个字符是航空公司的缩写,后 个数字代表航班信息。由于机场只有一条起飞跑道,调度员需要安排这些航班有序起飞。为了保证起飞的有序性,调度员需要先按照航空公司的缩写对所有航班进行排序,同一航空公司的航班再按照航班号的后 个数字进行排序。请编写一段代码,根据输入的航班号信息,帮助调度员输出航班的起飞顺序。

输入格式

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

CA3385,CZ6678,SC6508,DU7523,HK4456,MK0987

输出格式

输出按照调度排序后的有序航班号,航班号之间用逗号(,)分隔。

样例输入

样例 1

CA3385,CZ6678,SC6508,DU7523,HK4456,MK0987

样例 2

MU1087,CA9908,3U0045,FM1703

样例输出

样例 1

CA3385,CZ6678,DU7523,HK4456,MK0987,SC6508

样例 2

3U0045,CA9908,FM1703,MU1087

数据范围

航班号为 位长度,前 位为航空公司缩写,后 位为纯数字,不考虑存在后 位重复的场景。

题解

为了实现航班的有序起飞,我们需要先对航班号进行排序。排序的规则是先按照航班号的前 个字符(航空公司缩写)进行排序,如果航空公司缩写相同,再按照航班号的后 个数字进行排序。

参考代码

  • Python
def sort_flights(flight_str):
    flights = flight_str.split(',')
    flights.sort(key=lambda x: (x[:2], int(x[2:])))
    return ','.join(flights)

if __name__ == "__main__":
    flight_str = input().strip()
    print(sort_flights(flight_str))
  • Java
import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String flightStr = scanner.nextLine();
        String[] flights = flightStr.split(",");
        Arrays.sort(flights, (a, b) -> {
            int cmp = a.substring(0, 2).compareTo(b.substring(0, 2));
            if (cmp == 0) {
                return Integer.parseInt(a.substring(2)) - Integer.parseInt(b.substring(2));
            }
            return cmp;
        });
        System.out.println(String.join(",", flights));
    }
}
  • Cpp
#include <iostream>
#include <vector>
#include <sstream>
#include <algorithm>

using namespace std;

int main() {
    string str;
    cin >> str;
    stringstream ss(str);
    vector<string> flights;
    string flight;
    while (getline(ss, flight, ',')) {
        flights.push_back(flight);
    }

    sort(flights.begin(), flights.end(), [](const string &a, const string &b) {
        if (a.substr(0, 2) == b.substr(0, 2)) {
            return stoi(a.substr(2)) < stoi(b.substr(2));
        }
        return a.substr(0, 2) < b.substr(0, 2);
    });

    for (size_t i = 0; i < flights.size(); ++i) {
        if (i > 0) cout << ",";
        cout << flights[i];
    }
    return 0;
}
#华为OD##华为##春招##秋招##笔试#
最新华为OD机试-C&amp;D卷 文章被收录于专栏

本专栏给大家提供了华为2024最新华为OD-C/D卷的题目汇总和(Java/Cpp/Python)三语言解析 + 提供OJ在线评测

全部评论

相关推荐

2 2 评论
分享
牛客网
牛客企业服务