生日相同 2.0 【open judge】【结构体】
2017-12-11 20:41
1491 查看
我在初学结构体时觉得非常简单,但当应用到实际中时,又常常觉得有心无力,比如当名字排序、成绩排序、嵌套结构体混合使用时,经常犯错。今天老师开始讲结构体,以下题为例梳理下结构体相关知识点,已达到运用自如的境界。
生日相同 2.0
总时间限制: 1000ms 内存限制: 65536kB
描述
在一个有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
AC代码如下:
例如:stu1.sex stu1.tel
对于嵌套的结构体变量,访问其成员时应采用逐级访问的方法,直到得到所需访问的成员为止。
结构体变量名.一级成员名.二级成员名…
例如:stu1.birthday.month
当有两个同类型结构体变量时,可将一个结构体变量作为一个整体赋值给另外一个结构体变量。
生日相同 2.0
总时间限制: 1000ms 内存限制: 65536kB
描述
在一个有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
AC代码如下:
#include<cstdio> #include<cmath> #include<cstring> #include<algorithm> using namespace std; struct Student { char name[21]; }; struct node { int num; Student per[185]; } day[16][35]; bool compare(Student x,Student y) { if(strlen(x.name)<strlen(y.name)) return 1; if(strlen(x.name)==strlen(y.name)&&strcmp(x.name,y.name)<0) return 1; return 0; } int main() { int n,m,d,i,j,k; char a[21]; while(~scanf("%d",&n)) { bool p=0; for(i=0; i<n; i++) { scanf("%s%d%d",a,&m,&d); strcpy(day[m][d].per[day[m][d].num].name,a); day[m][d].num++; } for(i=1; i<=12; i++) for(j=1; j<=31; j++) if(day[i][j].num) sort(day[i][j].per,day[i][j].per+day[i][j].num,compare); for(i=1; i<=12; i++) for(j=1; j<=31; j++) if(day[i][j].num>1) { p=1; printf("%d %d",i,j); for(k=0; k<day[i][j].num; k++) printf(" %s",day[i][j].per[k].name); printf("\n"); } if(!p) printf("None\n"); } }
结构体类型概述
结构体是一个学起来非常简单、用起来非常方便的东西。特别是在处理事务如学生成绩管理、日历系统、个人信息等处理中,常需要将不同的数据组合成一个有机的整体,这些数据类型不同但又相互关联。结构体类型的特点
结构体类型由若干个数据项组成,其中每一个数据项称为一个结构体成员,它们都属于一种已经定义的数据元素。struct student //定义结构体类型 /* 大括号里为结构体成员*/ struct Student { char name[21]; }; //;与}之间填写结构体变量
结构体类型的嵌套定义
结构体类型可以嵌套定义,即定义的一个结构体类型的成员中可以有属于另外一个已经定义完成的结构体类型的变量。struct node { int num; Student per[185]; //这里嵌套了结构体 Student结构体在上文中已经定义了。 } day[16][35];
结构体变量的引用
结构体变量名.成员名例如:stu1.sex stu1.tel
对于嵌套的结构体变量,访问其成员时应采用逐级访问的方法,直到得到所需访问的成员为止。
结构体变量名.一级成员名.二级成员名…
例如:stu1.birthday.month
当有两个同类型结构体变量时,可将一个结构体变量作为一个整体赋值给另外一个结构体变量。
相关文章推荐
- 6377:生日相同 2.0(3.1数据结构之结构)
- 3.1数据结构之结构 6377 生日相同 2.0
- NOI3.1 6377:生日相同 2.0
- 生日相同(结构体排序)
- OpenJudge 6377:生日相同 2.0——题解
- 生日相同 2.0
- OpenJudge-计算机概论(A)-1-生日相同 2.0
- 6377:生日相同 2.0 题解
- 删除vector 某个结构体元素相同的内容
- 第十六周项目4 - 日期结构体(生日相差几天)
- 1035: 相同生日
- c#---部分;把数组或者结构体存入集合里,然后再从集合中取出之后,输出;foreach既可以用到提取数组重点额数据,也可以提取集合中的数据(前提是集合中的元素是相同数据类型)
- C语言中两个相同类型的结构体变量之间是可以相互直接赋值的
- Swift中的类和结构体的相同点与不同点
- 第十七周项目 4 日期结构体——生日相差几天
- 第十七周项目4-日期结构体(2 两同学生日差几天?)
- 问题 : 相同生日
- 生日相同
- 第十七周 项目4.2日期结构体(计算两个人的生日相差多少天)
- 17周,项目四,结构体计算两人生日相差的天数