生日相同 2.0 【open judge】【结构体】

来源:互联网 发布:淘宝生活服务类目 编辑:程序博客网 时间:2024/05/18 03:08

我在初学结构体时觉得非常简单,但当应用到实际中时,又常常觉得有心无力,比如当名字排序、成绩排序、嵌套结构体混合使用时,经常犯错。今天老师开始讲结构体,以下题为例梳理下结构体相关知识点,已达到运用自如的境界。

生日相同 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
当有两个同类型结构体变量时,可将一个结构体变量作为一个整体赋值给另外一个结构体变量。

原创粉丝点击