蓝桥杯 身份证排序 排序

问题描述
  安全局搜索到了一批(n个)身份证号码,希望按出生日期对它们进行从大到小排序,如果有相同日期,则按身份证号码大小进行排序。身份证号码为18位的数字组成,出生日期为第7到第14位
输入格式
  第一行一个整数n,表示有n个身份证号码
  余下的n行,每行一个身份证号码。
输出格式
  按出生日期从大到小排序后的身份证号,每行一条
样例输入
5
466272307503271156
215856472207097978
234804580401078365
404475727700034980
710351408803093165
样例输出
404475727700034980
234804580401078365
215856472207097978
710351408803093165
466272307503271156
数据规模和约定
  n<=100000
以前只知道sort函数可以对字母字符串比较大小,其实sort函数也可以对数字字符串比较大小。
原理是相通的,都是依据这个字符的ascii码的大小。
然后就是怎样存下来,刚开始想定义一个结构体,存储原身份证以及提取出出生日期。
其实一个string数组就够了。
 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 string s[100010];
 4 bool cmp(string a, string b) {
 5     string a1 = a.substr(6,8);
 6     string b1 = b.substr(6,8);
 7     if (a1 == b1) {
 8         return a > b;
 9     } else {
10         return a1 > b1;
11     }
12 }
13 int main() {
14     int n;
15     cin >> n;
16     for (int i = 0; i < n;i++) {
17         cin >> s[i];
18     }
19     sort(s, s + n, cmp);
20     for (int i = 0; i < n;i++) {
21         cout << s[i] << endl;
22     }
23     return 0;
24 }
posted @ 2020-04-21 08:40  kyk333  阅读(734)  评论(0)    收藏  举报