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
说明:
解题思路:
首先要处理输入,我们可以使用c++的stringstream或者python的split函数来处理输入,得到一个字符串类型的数组。然后提取出每个串的前两位与后四位,并重载运算函数来进行排序。Sort之后直接按序输出结果即可。
c++解法:
#include <bits/stdc++.h> using namespace std; struct node { string hangban, com, num; }a[110]; string s; vector<string> result;//存储分割得到的字符串 int n; //因为航空公司缩写排序按照从特殊符号$ & *,0~9,A~Z排序 //而这个顺序刚好是ascii码从小到大的顺序,所以可以直接比较 bool cmp(node A, node B)//重载sort比较函数 { if (A.com != B.com) return A.com < B.com; return A.num < B.num; } int main() { cin >> s; stringstream ss(s); string res; //使用','进行分割,将分割得到的字符串放入result中 while (getline(ss, res, ',')) { result.push_back(res); n ++ ; } //将字符串的前两位与后四位提出来并存到结构体,方便sort排序 for (int i = 0; i < n; i ++ ) { a[i].hangban = result[i]; a[i].com = result[i].substr(0, 2); a[i].num = result[i].substr(2, 4); } sort(a, a + n, cmp);//排序 for (int i = 0; i < n - 1; i ++ )//输出 cout << a[i].hangban << ','; cout << a[n - 1].hangban << endl; return 0; }
Java解法:
import java.util.Scanner; import java.util.*; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in);