描述

ACM集训队最近人气很旺,为了促进队员之间的交流,我们准备制作一个通讯录,每个队友的信息包括:
tzojid 电话 籍贯 出生年-月-日
各个字段均用英文字符和数字表示。使用空格分隔各个字段,每个字段不包含空格,如:crq的信息为:
crq 660000 huangyan 1979-1-1
等到所有队员的资料收集完毕,我们想要编排通讯录以便于队员的查询,编排方式如下:
首先根据地名作为第一关键字进行字典序排序,由于每年老乡之间都要为队友庆祝生日,因此将生日作为第二关键字进行递增排序。也许你在老乡之间能够找到一个非常有缘的队友即你们的生日是同一天,那么就根据tzojid作为第三关键字进行字典序排序,由于tzojid是唯一的,因此总能排序。我们确信今后将有大量的新队友加入,因此为了能一劳永逸,请你帮我们编程完成这个任务。

输入

输入数据有n+1行,第一行为集训队队员的总数n (n<=100),下面的n行为每个队员的信息,格式见样例。

输出

输出编排后的结果。

样例输入

5
crq 660000 huangyan 1979-1-1
carter 660000 huangyan 1979-1-1
tzc 668888 linhai 1990-1-11
wk 666666 ningbo 1986-10-1
metoo 665567 jiaojiang 1969-1-13

样例输出

carter 660000 huangyan 1979-1-1
crq 660000 huangyan 1979-1-1
metoo 665567 jiaojiang 1969-1-13
tzc 668888 linhai 1990-1-11
wk 666666 ningbo 1986-10-1

按照题目的描述,可以把我们需要的功能分成几个部分。

  1. 结构体{char[], int, char[], int, int, int}
    (虽然不用结构体也行,但这道题毕竟是出在结构体专栏里的)
  2. 比较字符串的函数
  3. 结构体值互换
  4. 比较生日

比较麻烦的可能是这个比较字符串的值(因为我们通常比较的是字符的,字符串怎么比啊)
另外结构体里的数组要定义大小,不然会报错。

题目里提到的字典序排序:

字典排序(lexicographical order)是一种对于随机变量形成序列的排序方法。其方法是,按照字母顺序,或者数字小大顺序,由小到大的形成序列。

对于数字,按大小排序
对于字符串,就是先比较第一个字符,再比较第二个…如果一样就看长度,短的放前面。

剩下的就看代码吧

#include<stdio.h>// 比较两个字符串,左边小返回0,右边小返回1
int strcmp(char *p1, char *p2) {int i = 0;while (p1[i] != '\0') {if (p2[i] == '\0')return 1;if (p1[i] < p2[i])return 0;if (p2[i] < p1[i])return 1;i++;}if (p2[i] == '\0')return 2;return 0;
}int main() {struct tzojInfo {char id[50];int tel;char pos[50];int birthY;int birthM;int birthD;};int n, i, j, flag;scanf("%d\n", &n);struct tzojInfo a[n];struct tzojInfo temp;// 输入for (i = 0; i < n; i++) {scanf("%s %d %s %d-%d-%d", a[i].id, &a[i].tel, a[i].pos, &a[i].birthY, &a[i].birthM, &a[i].birthD);}// 排序(选择)for (i = 0; i < n - 1; i++) {for (j = i + 1; j < n; j++) {flag = 0;//比较地名if (strcmp(a[i].pos, a[j].pos) == 1) {flag = 1;} else // 比较生日if (strcmp(a[i].pos, a[j].pos) == 2) {if (a[j].birthM < a[i].birthM || (a[j].birthM == a[i].birthM && a[j].birthD < a[i].birthD)) {flag = 1;} // 比较idif (a[j].birthM == a[i].birthM && a[j].birthD == a[i].birthD && (strcmp(a[i].id, a[j].id))) {flag = 1;}}if (flag) {temp = a[j];a[j] = a[i];a[i] = temp;}}}for (i = 0; i < n; i++) {printf("%s %d %s %d-%d-%d\n", a[i].id, a[i].tel, a[i].pos, a[i].birthY, a[i].birthM, a[i].birthD);}
}

里面这个一大堆if以前可以只写成一行,不过为了提高阅读性
就写成这样子了。

1741: 通讯录编排相关推荐

  1. 杭电oj题目题型分类(转)

    1001 整数求和 水题 1002 C语言实验题--两个数比较 水题 1003 1.2.3.4.5... 简单题 1004 渊子赛马 排序+贪心的方法归并 1005 Hero In Maze 广度搜索 ...

  2. HDOJ题目分类大全

    版权声明:本文为博主原创文章,欢迎转载,转载请注明本文链接! https://blog.csdn.net/qq_38238041/article/details/78178043 杭电里面有很多题目, ...

  3. HDU题目分类大全【大集合】

    基础题: 1000.1001.1004.1005.1008.1012.1013.1014.1017.1019.1021.1028.1029.  1032.1037.1040.1048.1056.105 ...

  4. 杭电OJ题目分类(转载)

    1001 整数求和 水题 1002 C语言实验题--两个数比较 水题 1003 1.2.3.4.5... 简单题 1004 渊子赛马 排序+贪心的方法归并 1005 Hero In Maze 广度搜索 ...

  5. hdoj杭电问题分类

    杭电上的题虽然多,但是一直苦于找不到问题分类,网页都是英文的,所以平时做题也没怎么看,今天仔细一看,问题分类竟然就在主页....做了那么久的题居然没发现,表示已经狗带..不要笑,不知道有没有像我一样傻 ...

  6. 转载:Hdu 题目分类

    原址点击 基础题:1000.1001.1004.1005.1008.1012.1013.1014.1017.1019.1021.1028.1029. 1032.1037.1040.1048.1056. ...

  7. HD OJ 题目分类

    动态规划:2037 2054 2084 hdu题目分类(转) http://blog.csdn.net/vsooda/article/details/7258791 1001 整数求和 水题 1002 ...

  8. hdu与poj题目分类

    POJ 初期: 一.基本算法: (1)枚举. (poj1753,poj2965) (2)贪心(poj1328,poj2109,poj2586) (3)递归和分治法. (4)递推. (5)构造法.(po ...

  9. hdu HDOJ 题目分类(转)

    动态规划:2037 2054 2084 hdu题目分类(转) http://apps.hi.baidu.com/share/detail/17053154 1001 整数求和 水题 1002 C语言实 ...

最新文章

  1. 人脸识别经典算法一:特征脸方法(Eigenface)
  2. IT人怎能忘记这些开源?
  3. FPGA之道(50)复位的设计
  4. SAP Spartacus My Company url的数据源, 来自Sampledataaddon
  5. [html] 如何使用H5实现电子签名?请说说你的思路
  6. pat-1057 Stack 树状数组+二分查找
  7. 印度朋友手把手教你学Scala(10):Scala里的样本对象
  8. markdown引入代码_给你自己的博客加个 Markdown
  9. 《Kotlin 极简教程 》第5章 集合类
  10. CCF NOI1117 排序
  11. php如何架构设计,PHP – 架构设计帮助 – OOP固体原则
  12. SpringBoot实战之文件上传微软云(Azure Storage)
  13. C# 一个基于.NET Core3.1的开源项目帮你彻底搞懂WPF框架Prism
  14. Android 触摸事件转换为鼠标事件
  15. 小学生认识计算机网络教案,小学信息技术四年级教案
  16. 一筐鸡蛋 1个1个拿……弱智题
  17. POJ2208 Pyramids 四面体体积
  18. 向量积(叉积)及其计算
  19. vid在c语言中的作用,——PVID的作用及和VID的区别
  20. pytorch_lesson16.1 OpenCV索贝尔算子/拉普拉斯算子调用+pytorch中构建cnn+复现经典模型(LeNet5+AlexNet)

热门文章

  1. FCFS、SJF、RR、SRT进程调度算法的代码实现
  2. 【LeetCode】871. Minimum Number of Refueling Stops 解题报告(Python)
  3. 一键即可实现图片翻译成中文,多国语言任意选
  4. ERROR in xxx.js from UglifyJs
  5. owlBus 的uwp版本上架了
  6. UWP Brush画笔详解
  7. word选中段尾不选回车符
  8. IOS UIVisualEffect 蒙版的View 高斯模糊实图
  9. 万家乐“天工系列”预热AWE2019 厨卫电器呈现新形态
  10. 2019ROS暑期学校之如故如新