OpenJudge-计算机概论(A)-1-生日相同 2.0
2016-04-15 17:09
351 查看
描述:
在一个有180人的大班级中,存在两个人生日相同的概率非常大,现给出每个学生的名字,出生月日。试找出所有生日相同的学生。
输入
第一行为整数n,表示有n个学生,n≤180。此后每行包含一个字符串和两个整数,分别表示学生的名字(名字第一个字母大写,其余小写,不含空格,且长度小于20)和出生月(1≤m≤12)日(1≤d≤31)。名字、月、日之间用一个空格分隔。
输出
每组生日相同的学生,输出一行,其中前两个数字表示月和日,后面跟着所有在当天出生的学生的名字,数字、名字之间都用一个空格分隔。对所有的输出,要求按日期从前到后的顺序输出。对生日相同的名字,按名字从短到长顺序输出,长度相同的按字典顺序输出。如没有生日相同的学生,输出“None”。
样例输入
6
Avril 3 2
Candy 4 5
Tim 3 2
Sufia 4 5
Lagrange 4 5
Bill 3 2
样例输出
3 2 Tim Bill Avril
4 5 Candy Sufia Lagrange
分析:
对于这样的问题,首先想到的就是排序,的确也就是用排序做的,但是这个问题的排序是分为好几层来判断排序的,比较复杂的一个排序改写,最后输出时也要做一定的处理方能以我们需要的格式输出。
代码如下(C):
OVER!!!
在一个有180人的大班级中,存在两个人生日相同的概率非常大,现给出每个学生的名字,出生月日。试找出所有生日相同的学生。
输入
第一行为整数n,表示有n个学生,n≤180。此后每行包含一个字符串和两个整数,分别表示学生的名字(名字第一个字母大写,其余小写,不含空格,且长度小于20)和出生月(1≤m≤12)日(1≤d≤31)。名字、月、日之间用一个空格分隔。
输出
每组生日相同的学生,输出一行,其中前两个数字表示月和日,后面跟着所有在当天出生的学生的名字,数字、名字之间都用一个空格分隔。对所有的输出,要求按日期从前到后的顺序输出。对生日相同的名字,按名字从短到长顺序输出,长度相同的按字典顺序输出。如没有生日相同的学生,输出“None”。
样例输入
6
Avril 3 2
Candy 4 5
Tim 3 2
Sufia 4 5
Lagrange 4 5
Bill 3 2
样例输出
3 2 Tim Bill Avril
4 5 Candy Sufia Lagrange
分析:
对于这样的问题,首先想到的就是排序,的确也就是用排序做的,但是这个问题的排序是分为好几层来判断排序的,比较复杂的一个排序改写,最后输出时也要做一定的处理方能以我们需要的格式输出。
代码如下(C):
#include <stdio.h> #include <string.h> #define _MAX 181 int n; char name[_MAX][21]; int len[_MAX]; int month[_MAX]; int day[_MAX]; //交换 void swap(int i, int j) { int k, length; len[i] ^= len[j]; len[j] ^= len[i]; len[i] ^= len[j]; month[i] ^= month[j]; month[j] ^= month[i]; month[i] ^= month[j]; day[i] ^= day[j]; day[j] ^= day[i]; day[i] ^= day[j]; length = len[i] > len[j] ? len[i] : len[j]; for (k = 0; k < length; k++) { name[i][k] ^= name[j][k]; name[j][k] ^= name[i][k]; name[i][k] ^= name[j][k]; } return ; } //判断字典顺序 int dic(int i, int j) { int k; for (k = 0; k < len[i]; k++) { if (name[i][k] > name[j][k]) { return 1; } else if (name[i][k] < name[j][k]) { return 0; } } return 0; } //排序 void sequence() { int i = 0, j = 0; for (; i < n - 1; i++) { for (j = i + 1; j < n; j++) { if (month[i] > month[j]) { swap(i, j); } else if (month[i] == month[j]) { if (day[i] > day[j]) { swap(i, j); } else if (day[i] == day[j]) { if (len[i] > len[j]) { swap(i, j); } else if (len[i] == len[j]) { if (dic(i, j)) { swap(i, j); } } } } } } return ; } //输出 void print() { int i, j, count, key = 0; for (i = 0; i < n;) { count = 0; for (j = i + 1; j < n; j++) { if (month[i] == month[j] && day[i] == day[j]) { count++; } else { break; } } if (count) { key++; printf("%d %d ", month[i], day[i]); for (; i < j - 1; i++) { printf("%s ", name[i]); } printf("%s\n", name[i++]); } if (!key) { printf("None\n"); } } return ; } int main(int argc, const char * argv[]) { int i = 0; scanf("%d", &n); for (; i < n; i++) { scanf("%s %d %d", name[i], &month[i], &day[i]); len[i] = (int)strlen(name[i]); } sequence(); print(); return 0; }
OVER!!!
相关文章推荐
- ajax原理及xmlhttpRequest
- 数据结构(循环队列子系统:c实现)
- smokeping对网络进行监控
- 二叉树的遍历详解(前序中序后序层次-递归和非递归)
- 多进程并发编程----进程间传递文件描述符基础~发送接收附属数据结构体介绍
- 数据结构---树---总结
- 可视化理解卷积神经网络-ECCV 2014
- MFC检测网络连接和ping IP地址
- jQuery ajax 请求HttpServlet返回[HTTP/1.1 405 Method not allowed]
- okHttp
- 数据结构之C语言实现哈夫曼树
- 计算机网络常见面试题
- Android下OkHttp请求自定义HTTPS证书接口设置
- 计算机网络系统的五层体系结构
- 为你的android App实现自签名的ssl证书(https)
- 性能调优之网络篇 - iperf
- ThreadingTCPServer相关源码和RequestHandler相关源码
- 数据结构(线性表子系统:c实现)
- 计算机图形学(二)输出图元_3_画线算法_2_DDA算法
- 获取网页图片链接(http:/)