(C卷,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(",");
        }
    }
}

免责声明:

1、IT资源小站为非营利性网站,全站所有资料仅供网友个人学习使用,禁止商用
2、本站所有文档、视频、书籍等资料均由网友分享,本站只负责收集不承担任何技术及版权问题
3、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除下载链接并致以最深的歉意
4、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
5、一经注册为本站会员,一律视为同意网站规定,本站管理员及版主有权禁止违规用户
6、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和IT资源小站的同意
7、IT资源小站管理员和版主有权不事先通知发贴者而删除本文

0

评论0

站点公告

没有账号?注册  忘记密码?