一【题目难度】
二【题目编号】
三【题目描述】
- 2019 年浙江大学将要庆祝成立 122 周年。为了准备校庆,校友会收集了所有校友的身份证号。现在需要请你编写程序,根据来参加校庆的所有人士的身份证号,统计来了多少校友。
四【题目示例】
-
输入格式: 输入在第一行给出不超过
1
0
5
10^5
105 的正整数 N,随后 N 行,每行给出一位校友的身份证号(18 位由数字和大写字母X组成的字符串)。题目保证身份证号不重复。 随后给出前来参加校庆的所有人士的信息:首先是一个不超过
1
0
5
10^5
105的正整数 M,随后 M 行,每行给出一位人士的身份证号。题目保证身份证号不重复。 -
输出格式: 首先在第一行输出参加校庆的校友的人数。然后在第二行输出最年长的校友的身份证号 —— 注意身份证第 7-14 位给出的是 yyyymmdd 格式的生日。如果没有校友来,则在第二行输出最年长的来宾的身份证号。题目保证这样的校友或来宾必是唯一的。 -
输入样例: 5 372928196906118710 610481197806202213 440684198612150417 13072819571002001X 150702193604190912 6 530125197901260019 150702193604190912 220221196701020034 610481197806202213 440684198612150417 370205198709275042 -
输出样例: 3 150702193604190912
五【解题思路】
- 首先我们要理清题意,我们需要一个函数帮助我们从身份证号中提取出生日期,另外既然需要匹配有多少人出席了,所以我们使用二分查找,那么也就需要一个排序函数。然后我们需要处理输入数据,两组数据的处理过程基本相同,我们都需要找出生日最小的(年龄最大)人,然后存储,只是第二个处理过程中我们还要注意记录出席的校友人数。另外还需要注意要使用
g
e
t
c
h
a
r
(
)
getchar()
getchar()函数吸收多余的换行符,因为我们扫描输入是字符串。最后只需要分两种情况输出:
①:如果有校友出席,输出校友中最年长的 ②:如果没有校友出席,输出出席人中最年长的
六【最终得分】
七【代码实现】
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int getTime(char* a)
{
int res = 0;
for(int i = 6;i<=13;i++)
{
res = res * 10 + a[i] - '0';
}
return res;
}
int cmp_1100_SchoolCelebration(const void *a,const void *b)
{
char* x = (char *)a;
char* y = (char *)b;
return strcmp(x,y);
}
int main()
{
int n,m,count = 0,minBirth1 = 100000000,minBirth2 = 100000000;
long long int id1,id2;
char id[20],SchoolMate[100000][20];
scanf("%d",&n);
getchar();
for(int i = 0;i<n;i++)
{
scanf("%s",SchoolMate[i]);
getchar();
minBirth1 = (minBirth1 < getTime(SchoolMate[i])) ? minBirth1 : getTime(SchoolMate[i]);
id1 = (minBirth1 == getTime(SchoolMate[i])) ? atol(SchoolMate[i]) : id1;
}
qsort(SchoolMate,n,sizeof(char)*20,cmp_1100_SchoolCelebration);
scanf("%d",&m);
getchar();
while(m--)
{
scanf("%s",id);
getchar();
if(bsearch(id,SchoolMate,n,sizeof(char)*20,cmp_1100_SchoolCelebration))
{
count++;
}
minBirth2 = (minBirth2 < getTime(id)) ? minBirth2 : getTime(id);
id2 = (minBirth2 == getTime(id)) ? atol(id) : id2;
}
printf("%d\n",count);
if(count != 0)
{
printf("%lld",id1);
}
else
{
printf("%lld",id2);
}
return 0;
}
八【提交结果】
|