原题链接:蓝桥杯算法提高VIP-身份证排序
解题思路:
自定义二级排序,优先比出生年月。
参考代码 ① :
#include<bits/stdc++.h> /* 525 ms 使用 string */ using namespace std; const int len = 100010; struct person { string num; string bro; } datas[len]; int cmp(person perst, person pernd) { if (perst.bro == pernd.bro) return perst.num > pernd.num; else return perst.bro > pernd.bro; } int main() { int num; cin >> num; for (int i = 0; i < num; i++) { datas[i].num.resize(19); scanf("%s", &datas[i].num[0]); datas[i].bro = datas[i].num.substr(6, 8); } sort(datas, datas + num, cmp); for (int i = 0; i < num; i++) puts(datas[i].num.c_str()); }
参考代码 ② :
#include<bits/stdc++.h> /* 176 ms 使用 C 风格字符串 */ using namespace std; const int len = 100010; struct person { char num[19]; char bro[9]; } datas[len]; int cmp(person perst, person pernd) { if (!strcmp(perst.bro, pernd.bro)) return strcmp(perst.num, pernd.num) > 0; else return strcmp(perst.bro, pernd.bro) > 0; } void cpy(char num[], char bro[]) { int bro_num = 6, index = 0; while (bro_num < 14) bro[index++] = num[bro_num++]; } int main() { int num; scanf("%d", &num); for (int i = 0; i < num; i++) { scanf("%s", datas[i].num); cpy(datas[i].num, datas[i].bro); } sort(datas, datas + num, cmp); for (int i = 0; i < num; i++) puts(datas[i].num); }
0.0分
8 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复