2019 年浙江大学将要庆祝成立 122 周年。为了准备校庆,校友会收集了所有校友的身份证号。现在需要请你编写程序,根据来参加校庆的所有人士的身份证号,统计来了多少校友。

输入格式:

输入在第一行给出不超过 105 的正整数 N,随后 N 行,每行给出一位校友的身份证号(18 位由数字和大写字母X组成的字符串)。题目保证身份证号不重复。

随后给出前来参加校庆的所有人士的信息:首先是一个不超过 105 的正整数 M,随后 M 行,每行给出一位人士的身份证号。题目保证身份证号不重复。

输出格式:

首先在第一行输出参加校庆的校友的人数。然后在第二行输出最年长的校友的身份证号 —— 注意身份证第 7-14 位给出的是 yyyymmdd 格式的生日。如果没有校友来,则在第二行输出最年长的来宾的身份证号。题目保证这样的校友或来宾必是唯一的。

输入样例:

5
372928196906118710
610481197806202213
440684198612150417
13072819571002001X
150702193604190912
6
530125197901260019
150702193604190912
220221196701020034
610481197806202213
440684198612150417
370205198709275042

输出样例:

3
150702193604190912

解题思路:

这道题我的方法是用结构数组来处理,里面的字段分别是身份证号和生日。总共需要三个这样的数组,分别是校友名单,来宾名单,来宾中的校友。依次读入数据,先把校友名单排序,方便后面使用二分查找。再读入来宾数据的时候,去找一下在不在校友名单中,如果在就把这个人放到“来宾中的校友”结构数组里面,同时计数器加一。最后看计数器的值,如果有人就对来宾中的校友排序,否则就对来宾名单排序,输出生日最早的身份证号就可以了。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXN 19typedef struct Pnode *PtrP;
typedef struct Pnode {char id[MAXN];int birth;
} People;int getBirth(char *id) {char temp[9] = {0};for ( int i=6; i<14; ++i )temp[i-6] = id[i];return atoi(temp);
}int compareBirth(const void *a, const void *b) {PtrP pa = (PtrP)a, pb = (PtrP)b;return pa->birth - pb->birth;
}int compareId(const void *a, const void *b) {PtrP pa = (PtrP)a, pb = (PtrP)b;return strcmp(pa->id, pb->id);
}int main(int argc, const char *argv[]) {int N, M, count, i;PtrP temp;if ( scanf("%d", &N)==EOF ) printf("error\n");People schoolmate[N];for ( i=0; i<N; ++i ) {if ( scanf("%s", schoolmate[i].id)==EOF ) printf("error\n");schoolmate[i].birth = getBirth(schoolmate[i].id);}qsort(schoolmate, N, sizeof(People), compareId);if ( scanf("%d", &M)==EOF ) printf("error\n");People comers[M], schoolmate_in_comers[M];for ( count=0, i=0; i<M; ++i ) {if ( scanf("%s", comers[i].id)==EOF ) printf("error\n");comers[i].birth = getBirth(comers[i].id);temp = bsearch(comers[i].id, schoolmate, N, sizeof(People), compareId);if ( temp ) {strcpy(schoolmate_in_comers[count].id, temp->id);schoolmate_in_comers[count++].birth = temp->birth;}}printf("%d\n", count);if ( count ) {qsort(schoolmate_in_comers, count, sizeof(People), compareBirth);printf("%s\n", schoolmate_in_comers[0].id);} else {qsort(comers, M, sizeof(People), compareBirth);printf("%s\n", comers[0].id);}return EXIT_SUCCESS;
}

pat basic 1100 校庆相关推荐

  1. PAT 乙级 1100 校庆

    [题目描述] 1100 校庆 (25 分) 2019 年浙江大学将要庆祝成立 122 周年.为了准备校庆,校友会收集了所有校友的身份证号.现在需要请你编写程序,根据来参加校庆的所有人士的身份证号,统计 ...

  2. 「PAT乙级真题解析」Basic Level 1100 校庆 (问题分析+完整步骤+伪代码描述+提交通过代码)

    乙级的题目训练主要用来熟悉编程语言的语法和形成良好的编码习惯和编码规范.从小白开始逐步掌握用编程解决问题. PAT (Basic Level) Practice 1100 校庆 问题分析 题设给定了一 ...

  3. PAT (Basic Level) Practice (中文)题目集合

    1001 害死人不偿命的(3n+1)猜想 (15 分) #include<bits/stdc++.h> using namespace std;int n, ans; int main() ...

  4. PAT (Basic Level) Practise (中文)-1025. 反转链表 (25)

    PAT (Basic Level) Practise (中文)-1025. 反转链表 (25)   http://www.patest.cn/contests/pat-b-practise/1025 ...

  5. PAT甲级1100 Mars Numbers:[C++题解]进制位、使用stringstream类读入

    文章目录 题目分析 题目分析 分析: 使用char型二维数组 names[][5] 存储这些 火星文. ac代码 #include<iostream> #include<sstrea ...

  6. PAT (Basic Level) Practice (中文)答案合集

    准备复试专用,目标刷完全部中文题! 1001 害死人不偿命的(3n+1)猜想 (15 分) 卡拉兹(Callatz)猜想: 对任何一个正整数 n,如果它是偶数,那么把它砍掉一半:如果它是奇数,那么把 ...

  7. PAT (Basic Level) Practise (中文)-1034. 有理数四则运算(20)

    PAT (Basic Level) Practise (中文)-1034. 有理数四则运算(20)  http://www.patest.cn/contests/pat-b-practise/1034 ...

  8. 【题解】PAT (Basic Level) Practice (中文)

    互联网行业的小白,写博客的目的是为了记录自己的学习过程.对自己学习中所犯的错误做一个总结.由于水平有限,博客中难免会有一些错误出现,有纰漏之处恳请各位大佬不吝赐教! PAT Basic Level P ...

  9. PAT basic level 答案+解题思路+难点 (个人刷题记录)

    PAT basic level 使用语言:C++ 仅记录一下自己刷题过程的心得体会 永远保持更新(期待更好的解法) 可能有些题没有(那就是我还没做出来,以后会更的!) 欢迎大家与我讨论交流√ 题目序列 ...

最新文章

  1. 【转载】pycharm远程调试配置
  2. Java基础学习总结(21)——数组
  3. Kail Linux渗透测试教程之Recon-NG框架
  4. Call to undefined function Workerman\posix_getpid
  5. 2008年CCNA第三学期第一单元中文题目(2008-12-21 18:30:01
  6. [NOTE] sqli-labs Basic Challenges
  7. EFCore废弃了TransactionScope取而代之的Context.Database.BeginTransaction
  8. Servlet 调用过程
  9. python toimage函数 -baijiahao_财码Python管理会计小实验成本性态分析So Easy
  10. 【golang】从源代码编译golang编译器
  11. 快速开发字段很多的MIS表
  12. 适合产品经理的桌面壁纸-分类神器
  13. word:回车替换成空格
  14. 特斯拉开火,状告5名前员工、小鹏汽车、Zoox身陷漩涡
  15. 企业数字化转型 CIO需遵循三大原则
  16. 受用一生的高效PyCharm使用技巧(三)
  17. 2019年终总结,一朝看尽长安花
  18. python分析红楼梦中人物形象_《红楼梦》中女性人物形象分析
  19. Xshell连接服务器
  20. 2d游戏循环滚动地图中的拼接缝隙问题

热门文章

  1. 巨人10Q4财报:营收3.6亿元环比增8.7%
  2. java毕业设计线上甜品店售卖系统Mybatis+系统+数据库+调试部署
  3. Tomcat 启动报错: Failed to execute goal org.apache.tomcat.maven:tomcat7 Could not start Tomcat
  4. 决策树(Decision Trees)
  5. verilog练习:hdlbits网站上的做题笔记(6)
  6. 2018.8.9日,预习笔记,Linux软件包安装和卸载
  7. 一些牛人榜样,多看看他们写的东西
  8. dnf吸怪源码c语言,发DNF源码了
  9. spotify下载_我的Spotify推荐系统之旅
  10. 浅谈图数据库1:什么是图?