• PTA 乙级 1028 人口普查 (20分) C/C++(全部测试点分析)


     总共写了两版,第一版的代码复制较多,所以改了第二版

    测试点0:一开始这个测试点错了很多遍,后来做了个标志位存储第一个数据,就通过了。。。

    测试点1、2:若有超出年龄范围的,则无法通过此测试点

    测试点3:有效次数为0时,必须仅输出0,后面不可有其他的数据

    测试点4:挺容易超时,建议不要用java做本题

    C/C++

    第一版

     1 #include<iostream>
     2 #include<string>
     3 
     4 using namespace std;
     5 
     6 struct {
     7     int y;
     8     int m;
     9     int d;
    10     string name;
    11 }ol, yo, man;
    12 
    13 int main() {
    14     /*总人数*/
    15     int n = 0;
    16     /*有效次数*/
    17     int    ef = 0;
    18     int flag = 1;
    19     cin >> n;
    20     for (int i = 0; i < n; i++) {
    21         cin >> man.name;    
    22         scanf("%d/%d/%d", &man.y, &man.m, &man.d);    //为通过vs的编译则用scanf_s,实际PTA的OJ系统不用
    23         //是否超出年龄限制
    24         if (man.y > 2014) continue;
    25         else if (man.y == 2014 && man.m > 9) continue;
    26         else if (man.y == 2014 && man.m == 9 && man.d > 6) continue;
    27         if (man.y < 1814) continue;
    28         else if (man.y == 1814 && man.m < 9) continue;
    29         else if (man.y == 1814 && man.m == 9 && man.d < 6) continue;
    30         //有效人数增加
    31         ef++;
    32 
    33         if (flag) {
    34             ol = man;
    35             yo = man;
    36             flag = 0;
    37         }
    38         //年龄较大
    39         if (man.y < ol.y) ol = man;
    40         else if (man.y == ol.y && man.m < ol.m) ol = man;
    41         else if (man.y == ol.y && man.m == ol.m && man.d < ol.d) ol = man;
    42         //年龄较小
    43         if (man.y > yo.y) yo = man;
    44         else if (man.y == yo.y && man.m > yo.m) yo = man;
    45         else if (man.y == yo.y && man.m == yo.m && man.d > yo.d) yo = man;
    46     }
    47     if (ef == 0)cout << ef;    //有效人数为0,则直接输出0(不可多输出空格,否则测试点3无法通过)
    48     else cout << ef << " " << ol.name << " " << yo.name; 
    49     return 0;
    50 }

    第二版

     1 #include<iostream>
     2 #include<string>
     3 
     4 using namespace std;
     5 
     6 typedef struct {    //以人为单位的结构体
     7     int y;
     8     int m;
     9     int d;
    10     string name;
    11 }human;
    12 
    13 int cmp(human *a,human *b) {            //比较函数(a大返回1,b大返回0)
    14     int aflag = 0;
    15     if (a->y > b->y) aflag = 1;
    16     else if (a->y == b->y && a->m > b->m) aflag = 1;
    17     else if (a->y == b->y && a->m == b->m && a->d > b->d) aflag = 1;
    18     return aflag;
    19 }
    20 
    21 int main() {
    22     /*总人数*/
    23     int n = 0;
    24     /*有效人数*/
    25     int    ef = 0;
    26     int flag = 1;
    27     /*所有人结构体*/
    28     human ol, yo, man, oldm, yonm;
    29     oldm = { 1814,9,6,"max" };            //年龄最大
    30     yonm = { 2014,9,6,"min" };            //年龄最小
    31     cin >> n;
    32     for (int i = 0; i < n; i++) {
    33         //输入
    34         cin >> man.name;
    35         scanf("%d/%d/%d", &man.y, &man.m, &man.d);    //为通过vs的编译则用scanf_s,实际PTA的OJ系统不用
    36         //判断是否超过年龄限制
    37         if (cmp(&man, &yonm))continue;
    38         if (cmp(&oldm, &man))continue;
    39         //未超过年龄限制,有效人数增加
    40         ef++;
    41         if (flag) {
    42             ol = man;
    43             yo = man;
    44             flag = 0;
    45         }
    46         if (cmp(&yo, &man))yo = man;    //统计年龄最大
    47         if (cmp(&man, &ol))ol = man;    //统计年龄最小
    48     }
    49     if (ef == 0)cout << ef;                //有效人数为0,则直接输出0(不可多输出空格,否则测试点3无法通过)
    50     else cout << ef << " " << yo.name << " " << ol.name;
    51     return 0;
    52 }

     

  • 相关阅读:
    快速构建一个权限项目(七)
    快速构建一个权限项目(六)
    快速构建一个权限项目(五)
    快速构建一个权限项目(四)
    快速构建一个权限项目(三)
    快速构建一个权限项目(二)
    快速构建一个权限项目(一)
    MySql快速入门(四)
    Mysql快速入门(三)
    Mysql快速入门(二)
  • 原文地址:https://www.cnblogs.com/SCP-514/p/13302933.html
Copyright © 2020-2023  润新知