第m大的身份证号码(局部排序代全局、结构体排序)
第m大的身份证号码(点击)
时间限制: 1 Sec 内存限制: 128 MB
提交: 392 解决: 143
[提交] [状态] [讨论版] [命题人:admin]
题目描述
身份证号是我国公民的唯一识别码,它由18位数字或字母组成(只可能最后一位是字母)。18位身份证号码各位的含义如下:第1-2位为省、自治区、直辖市代码;第3-4位为地级市、盟、自治州代码;第5-6位为县、县级市、区代码。第7-14位为出生年月日,比如19970401代表1997年4月1日;第15-16位为顺序号,第17位代表性别,男为单数,女为双数;第18位为校验码,0-9和X。作为尾号的校验码,是把前十七位数字代入统一
的公式计算出来的,解答本题你不用关心是如何计算出来的。现在给你n个身份证号码,请你按照出生年月日的字典序(年龄从大到小)输出第m个人的身份证号。
输入
第一行包含两个正整数n和m,两数间用一个空格分隔,接下来的n行每行为一个形如上述格式的身份证号码(不需要关心校验码的正确性,不影响本题解答)。
输出
仅包含一行,为题目要求的一个身份证号码。
样例输入
复制样例数据
4 2
110108196004063022
13021119640203652X
420333197902112718
210222200012036512
样例输出
13021119640203652X
思路:
开始以为必须要将全部内容排序 然后想到了用 结构体+sort 排序 但后来写了一下cmp函数 由于从第7-14位 都需要考虑 所以cmp函数不好写 后来就放弃了这种想法。(如果用冒泡加判断每一位更是不容易)
比赛完了 和同学商量 知道原来身份证年龄可以看成一个数字 这个数字越小 代表他的年龄越大 想了想确实是这样 而且还是挺简单的 难怪 好多人都做出来了 。
代码:
#include<stdio.h>
#include<math.h>
int main()
{
int sum[1005][5],n,m,i,j,temp;
char a[1005][25];
scanf("%d%d",&n,&m);
for(i=0;i<n;i++){ //输入每组的字符(身份证号码)
scanf("%s",a[i]);
}
for(i=0;i<n;i++){
sum[i][0]=i+1; //开二维数组 [0]位放这个省份证号码原来的顺组(不然下面排完序根本不知道要输出哪个身份证号了)
sum[i][1]=((a[i][6]-'0')*pow(10,7)+(a[i][7]-'0')*pow(10,6)+(a[i][8]-'0')*pow(10,5)+(a[i][9]-'0')*pow(10,4)+(a[i][10]-'0')*pow(10,3)+(a[i][11]-'0')*pow(10,2)+(a[i][12]-'0')*pow(10,1)+(a[i][13]-'0'));
} //将出生年月日 总共转换成一个数字 准备排序
for(i=0;i<n-1;i++){
for(j=0;j<n-i-1;j++){
if(sum[j][1]>sum[j+1][1]){
temp=sum[j][1];
sum[j][1]=sum[j+1][1]; // 这一步可以使用结构体排序 比赛的时候也有点忘记了
sum[j+1][1]=temp; //先就用冒泡替代一下吧
temp=sum[j][0];
sum[j][0]=sum[j+1][0];
sum[j+1][0]=temp;
}
}
}
printf("%s\n",a[sum[m-1][0]-1]); //通过排序后的数字 将要求的第m大的身份证号输出
return 0; // 二维数组存放原来编号起了非常大的作用
}
结构体排序(部分):
struct node{
int x,y; //定义结构体放在最上面 不然cmp函数会报错 说node找不到
}sum[1005]; //开始我定义了二维数组 但会报错 只需要定义以为数组就可以 因为这样就代表每个
// 都数组包含两个int型参数
int cmp(node a,node b)
{
return a.y<b.y;
}
for(i=0;i<n;i++){
sum[i].x=i+1;
sum[i].y=((a[i][6]-'0')*pow(10,7)+(a[i][7]-'0')*pow(10,6)+(a[i][8]-'0')*pow(10,5)+(a[i][9]-'0')*pow(10,4)+(a[i][10]-'0')*pow(10,3)+(a[i][11]-'0')*pow(10,2)+(a[i][12]-'0')*pow(10,1)+(a[i][13]-'0'));
}
sort(sum,sum+n,cmp); 一维数组sort+结构体 排序
第m大的身份证号码(局部排序代全局、结构体排序)的更多相关文章
- 转载 从最简单的vector中sort用法到自定义比较函数comp后对结构体排序的sort算法
转载自:http://www.cnblogs.com/cj695/p/3863142.html sort函数在使用中非常好用,也非常简单,而且效率与冒泡或者选择排序不是一个数量级.本文就sort函数在 ...
- 【转】 从最简单的vector中sort用法到自定义比较函数comp后对结构体排序的sort算法
sort函数在使用中非常好用,也非常简单,而且效率与冒泡或者选择排序不是一个数量级.本文就sort函数在vector中的用法分为sort函数入门用法与自定义comp比较函数比较结构体这两个最基本的功能 ...
- go语言的排序、结构体排序
原文:https://studygolang.com/articles/1598 晚上准备动手写点 go 的程序的时候,想起 go 如何排序的问题.排序 sort 是个基本的操作,当然搜索 searc ...
- 从最简单的vector中sort用法到自定义比较函数comp后对结构体排序的sort算法
sort函数在使用中非常好用,也非常简单,而且效率与冒泡或者选择排序不是一个数量级.本文就sort函数在vector中的用法分为sort函数入门用法与自定义comp比较函数比较结构体这两个最基本的功能 ...
- 【C++】从最简单的vector中sort用法到自定义比较函数comp后对结构体排序的sort算法
sort函数在使用中非常好用,也非常简单,而且效率与冒泡或者选择排序不是一个数量级.本文就sort函数在vector中的用法分为sort函数入门用法与自定义comp比较函数比较结构体这两个最基本的功能 ...
- 小球(总结sort和cmp函数、结构体排序)
问题 N: 小球(点击) 时间限制: 1 Sec 内存限制: 128 MB ...
- HDOJ 1009. Fat Mouse' Trade 贪心 结构体排序
FatMouse' Trade Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- 网上关于sort结构体排序都不完整,我来写一个完整版的 2014-08-09 16:50 60人阅读 评论(0) 收藏
主要参考sort函数_百度文库, 但是那篇有错误 2.结构体排序,a升,b降,c降 平板视图 打印? 01 #include <iostream> 02 #include <algo ...
- hdu1263 水果(结构体排序)
Problem Description 夏天来了~~好开心啊,呵呵,好多好多水果~~ Joe经营着一个不大的水果店.他认为生存之道就是经营最受顾客欢迎的水果.现在他想要一份水果销售情况的明细表,这样J ...
随机推荐
- PAT-1134 Vertex Cover (图的建立 + set容器)
A vertex cover of a graph is a set of vertices such that each edge of the graph is incident to at le ...
- js动态添加iframe,自适应页面宽高
function showIframe(url,w,h){ //添加iframe var if_w = w; var if_h = h; $("<iframe width='" ...
- jQuery基础总计
框架概述 框架(Framework)是整个或部分系统的可重用设计,表现为一组抽象构件及构件实例间交互的方法.框架是完成某种功能的半成品,框架是将我们日常的繁琐的代码进行抽取,并提供出更加简洁,功能更加 ...
- 实现.Net程序中OpenTracing采样和上报配置的自动更新
前言 OpenTracing是一个链路跟踪的开放协议,已经有开源的.net实现:opentracing-csharp,同时支持.net framework和.net core,Github地址:htt ...
- [JavaWeb基础] 009.Struts2 上传文件
在web开发中,我们经常遇到要把文件上传下载的功能,这篇文章旨在指导大家完成文件上传功能 1.首先我们需要一个上传文件的页面. <!--在进行文件上传时,表单提交方式一定要是post的方式, 因 ...
- [批处理教程之Git]001.Git 常用命令大全
基本技巧 1.安装后的第一步 安装git后,第一件事你需要设置你的名字和邮箱,因为每次提交都需要这些信息. $ git config --global user.name "Some One ...
- [FlashDevelop] 001.FlashDevelop + LayaFlash环境搭建
产品简介: 唯一使用Flash直接开发或转换大型HTML5游戏的全套解决方案. 开发工具 FlashDevelop + JDK + flashplayer_18_sa_debug + LayaFlas ...
- java 单列集合总结
Collection 接口 add() remove() contains() clear(); size(); 迭代器遍历(普通迭代器,不能再遍历过程中修改集合的长度) List接口 单列集合 有序 ...
- Chisel3 - 复合数据类型
https://mp.weixin.qq.com/s/rXYqiZKuBpAYL8R94zxgRA Chisel允许用户根据需要,把基本数据类型组合成为复合数据类型使用.如C语言里面的结构体,这样 ...
- HTML静态页面项目:英雄联盟官网网站 的实现
效果: 源码与素材:链接: https://pan.baidu.com/s/1OuJd1lfEV7mrnf0I6FXm4A 提取码: 5c6j 复制这段内容后打开百度网盘手机App,操作更方便哦