返回目录

题目描述

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

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

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

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

说明:

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

输入描述

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

输入CA3385,CZ6678,SC6508,DU7523,HK4456,MK0987
输出CA3385,CZ6678,DU7523,HK4456,MK0987,SC6508
说明输入为目前停留在该机场的航班号,输出为按照调度排序后输出
的有序的航班号

Python算法源码

def main():
    flights = input().split(",") # 将输入的航班信息以逗号分割为列表
    flights.sort(key=lambda x: (x[:2], x[2:])) # 使用Lambda表达式对航班列表进行排序,先按照前两个字符排序,再按照后面的字符排序
    print(",".join(flights)) # 输出排序后的航班信息,用逗号连接各个航班字符串

if __name__ == "__main__":
    main()

C算法源码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_FLIGHTS 100

// 定义航班结构体
typedef struct {
    char* abbreviation; // 缩写
    char* number;       // 编号
} Flight;

// 比较函数,用于排序航班
int compare_flights(const void* a, const void* b) {
    Flight* flight1 = (Flight*)a;
    Flight* flight2 = (Flight*)b;

    // 按照缩写排序
    int abbr_cmp = strcmp(flight1->abbreviation, flight2->abbreviation);
    if (abbr_cmp != 0) {
        return abbr_cmp;
    } else {
        // 如果缩写相同,按照编号排序
        return strcmp(flight1->number, flight2->number);
    }
}

int main() {
    char input[1000];
    fgets(input, sizeof(input), stdin);

    // 分割输入字符串得到航班信息
    char* token = strtok(input, ",");
    int num_flights = 0;
    Flight flights[MAX_FLIGHTS];

    while (token != NULL && num_flights < MAX_FLIGHTS) {
        char* abbreviation = malloc(3 * sizeof(char)); // 2个字符 + '\0'
        char* number = malloc((strlen(token) - 2) * sizeof(char)); // 去掉缩写后剩余的部分

        strncpy(abbreviation, token, 2);
        abbreviation[2] = '\0';
        strcpy(number, token + 2);

        flights[num_flights].abbreviation = abbreviation;
        flights[num_flights].number = number;

        num_flights++;
        token = strtok(NULL, ",");
    }

    // 排序航班
    qsort(flights, num_flights, sizeof(Flight), compare_flights);

    // 输出排序后的航班信息
    for (int i = 0; i < num_flights; i++) {
        printf("%s%s", flights[i].abbreviation, flights[i].number);
        if (i != num_flights - 1) {
            printf(",");
        }
    }
    printf("\n");

    // 释放动态分配的内存
    for (int i = 0; i < num_flights; i++) {
        free(flights[i].abbreviation);
        free(flights[i].number);
    }

    return 0;
}

Java算法源码

import java.util.Arrays;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String input = scanner.nextLine();
        String[] flights = input.split(","); // 将输入的航班信息以逗号分割为字符串数组

        Arrays.sort(flights, (a, b) -> { // 使用Lambda表达式对航班数组进行排序
            String abbr1 = a.substring(0, 2); // 获取航班缩写
            String num1 = a.substring(2); // 获取航班编号

            String abbr2 = b.substring(0, 2); // 获取航班缩写
            String num2 = b.substring(2); // 获取航班编号

            if (abbr1.equals(abbr2)) { // 如果缩写相同,则按照编号排序
                return num1.compareTo(num2);
            } else { // 否则按照缩写排序
                return abbr1.compareTo(abbr2);
            }
        });

        for (int i = 0; i < flights.length; i++) { // 遍历排序后的航班数组并输出
            System.out.print(flights[i]);
            if (i != flights.length - 1) {
                System.out.print(",");
            }
        }
    }
}
最后修改:2024 年 03 月 31 日
如果觉得我的文章对你有用,请随意赞赏