原题链接:蓝桥杯算法提高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、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复