• 【洛谷P1104】生日


    题目描述

    cjf君想调查学校OI组每个同学的生日,并按照从大到小的顺序排序。但cjf君最近作业很多,没有时间,所以请你帮她排序。

    输入输出格式

    输入格式:

    有2行,第1行为OI组总人数n;第2行至第n+1行分别是每人的姓名s、出生年y、月m、日d。

    输出格式:

    有n行,即n个生日从大到小同学的姓名。(如果有两个同学生日相同,输入靠后的同学先输出)

    输入输出样例

    输入样例#1

    3

    Yangchu 1992 4 23

    Qiujingya 1993 10 13

    Luowen 1991 8 1

    输出样例#1

    Luowen

    Yangchu

    Qiujingya

    说明

    数据规模

    1<n<100

    length(s)<20

     算法:

    排序

    分析:

    这道题讲了要我们把n个人的生日按从老到幼排个序,然后要注意一点,就是后输入(编号大的人)算更老。

    这道题很水,用简单的排序就可以解决。

    C++的STL这是非常好用,自己写个comp函数再套用sort就可以了。Comp函数假如三目运算符写得很晕的话直接用if就可以了。

    另外,吐槽一下ccf的Guide,虽然可以编译Pascal/c/c++的程序,但是没有括号匹配,奇怪的换行,函数的搭配。今天不知道为什么作死用了一下,下次还是用Dev好。

    上代码:

     1 #include<cstdio>
     2 #include<iostream>
     3 #include<cstring>
     4 #include<algorithm>
     5 using namespace std;
     6 
     7 int n;
     8 struct node
     9 {
    10     char s[25];                                //名字
    11     int no,y,m,d;                                //编号,年,月,日
    12 }a[110];
    13 
    14 inline int read()                                //读入优化
    15 {
    16     int x=0,f=1;
    17     char c=getchar();
    18     while (c<48||c>57)
    19         f=c=='-'?-1:1,c=getchar();
    20     while (c>=48&&c<=57)
    21         x=(x<<1)+(x<<3)+(c^48),c=getchar();
    22     return x*f;
    23 }
    24 
    25 inline bool comp(const node &a,const node &b)        //比较函数
    26 {
    27     if (a.y<b.y)                                //小的或者大的就直接返回值,
    28         return 1;                                //否则就代表这一项相等
    29     if (a.y>b.y)
    30         return 0;
    31     if (a.m<b.m)
    32         return 1;
    33     if (a.m>b.m)
    34         return 0;
    35     if (a.d<b.d)
    36         return 1;
    37     if (a.d>b.d)
    38         return 0;
    39     return a.no>b.no;                            //最后判断同一天的情况
    40 }
    41 
    42 int main()
    43 {
    44     int i;
    45     n=read();
    46     for (i=1;i<=n;i++)
    47     {
    48         scanf("%s",a[i].s);
    49         a[i].y=read();
    50         a[i].m=read();
    51         a[i].d=read();
    52         a[i].no=i;                                //记录编号
    53     }
    54     sort(a+1,a+n+1,comp);
    55     for (i=1;i<=n;i++)
    56         puts(a[i].s);                        //puts可以直接输出内容加换行,比printf快
    57     return 0;
    58 }

    嗯,就这样了。

  • 相关阅读:
    Map
    Enumeration输出
    iterator的基本用法
    Annotation整合工厂设计模式
    自定义Annotation
    Annotation
    动态代理设计模式
    静态代理设计模式
    自定义ClassLoader
    获取类的类对象的几种方式
  • 原文地址:https://www.cnblogs.com/Ronald-MOK1426/p/8444852.html
Copyright © 2020-2023  润新知