(新卷,100分)- 机场航班调度程序(Java & JS & Python & C)
题目描述
XX市机场停放了多架飞机,每架飞机都有自己的航班号CA3385,CZ6678,SC6508等,航班号的前2个大写字母(或数字)代表航空公司的缩写,后面4个数字代表航班信息。
但是XX市机场只有一条起飞跑道,调度人员需要安排目前停留在机场的航班有序起飞。
为保障航班的有序起飞,调度员首先按照航空公司的缩写(航班号前2个字母)对所有航班进行排序,同一航空公司的航班再按照航班号的后4个数字进行排序,最终获得安排好的航班的起飞顺序。
请编写一段代码根据输入的航班号信息帮助调度员输出航班的起飞顺序。
说明:
航空公司缩写排序按照从特殊符号$ & *,0~9,A~Z排序;
输入描述
第一行输入航班信息,多个航班号之间用逗号 "," 分隔,输入的航班号不超过100个。
例如:
CA3385,CZ6678,SC6508,DU7523,HK4456,MK0987
备注:
航班号为6为长度,后4位位纯数字,不考虑存在后4位重复的场景。
输出描述
CA3385,CZ6678,DU7523,HK4456,MK0987,SC6508
用例
| 输入 | CA3385,CZ6678,SC6508,DU7523,HK4456,MK0987 |
| 输出 | CA3385,CZ6678,DU7523,HK4456,MK0987,SC6508 |
| 说明 | 输入为目前停留在该机场的航班号,输出为按照调度排序后输出的有序的航班号 |
| 输入 | MU1087,CA9908,3U0045,FM1703 |
| 输出 | 3U0045,CA9908,FM1703,MU1087 |
| 说明 | 无 |
题目解析
JS算法源码
const rl = require("readline").createInterface({ input: process.stdin }); var iter = rl[Symbol.asyncIterator](); const readline = async () => (await iter.next()).value; void (async function () { const flights = (await readline()).split(","); flights.sort((a, b) => { const abbr1 = a.slice(0, 2); const num1 = a.slice(2); const abbr2 = b.slice(0, 2); const num2 = b.slice(2); if (abbr1 == abbr2) { return strcmp(num1, num2); } else { return strcmp(abbr1, abbr2); } }); console.log(flights.join(",")); })(); function strcmp(a, b) { if (a > b) { return 1; } else if (a < b) { return -1; } else { return 0; } }Java算法源码
import java.util.Arrays; import java.util.Scanner; import java.util.StringJoiner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String[] flights = sc.nextLine().split(","); StringJoiner sj = new StringJoiner(","); Arrays.stream(flights) .sorted( (a, b) -> { 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); } }) .forEach(sj::add); System.out.println(sj); } }Python算法源码
flights = input().split(",") flights.sort(key=lambda x: (x[0:2], x[2:])) print(",".join(flights))C算法源码
#include <stdio.h> #include <string.h> #include <stdlib.h> int cmp(const void *a, const void *b) { char *A = (char *) a; char *B = (char *) b; char abbr1[3]; strncpy(abbr1, A, 2); char num1[5]; strncpy(num1, A+2, 4); char abbr2[3]; strncpy(abbr2, B, 2); char num2[5]; strncpy(num2, B+2, 4); int res = strcmp(abbr1, abbr2); if(res == 0) { return strcmp(num1, num2); } else { return res; } } int main() { char s[1000]; gets(s); char flights[100][7]; int flights_size = 0; char *token = strtok(s, ","); while (token != NULL) { strcpy(flights[flights_size++], token); token = strtok(NULL, ","); } qsort(flights, flights_size, sizeof(flights[0]), cmp); for (int i = 0; i < flights_size; i++) { printf("%s", flights[i]); if (i != flights_size - 1) { printf(","); } } }