专栏首页卡尼慕1028 人口普查 (20 分)

1028 人口普查 (20 分)

1028 人口普查 (20 分)

某城镇进行人口普查,得到了全体居民的生日。现请你写个程序,找出镇上最年长和最年轻的人。

这里确保每个输入的日期都是合法的,但不一定是合理的——假设已知镇上没有超过 200 岁的老人,而今天是 2014 年 9 月 6 日,所以超过 200 岁的生日和未出生的生日都是不合理的,应该被过滤掉。

输入格式:

输入在第一行给出正整数 N,取值在(0,105];随后 N 行,每行给出 1 个人的姓名(由不超过 5 个英文字母组成的字符串)、以及按 yyyy/mm/dd(即年/月/日)格式给出的生日。题目保证最年长和最年轻的人没有并列。

输出格式:

在一行中顺序输出有效生日的个数、最年长人和最年轻人的姓名,其间以空格分隔。

输入样例:

5
John 2001/05/12
Tom 1814/09/06
Ann 2121/01/30
James 1814/09/05
Steve 1967/11/20

输出样例:

3 Tom John

我的代码

// 1028 人口普查 (20 分).cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
#include <string>
#include <stdio.h>
#include <vector>
#include <algorithm>
/*
解决方案:1)把scanf换为scanf_s
          2)在前面加上#pragma warning(disable:4996)
*/
using namespace std;
struct People
{
    string name = "";
    int year = 0;
    int month = 0;
    int day = 0;
    long day_total = 0;
};
bool comp(People peo1,    People peo2) {
    return peo1.day_total > peo2.day_total;
}
int main(){
    int total;
    cin >> total;
    vector<People> peo;
    long day_now = 2014 * 365 + 9 * 30 + 6;
    for (int i = 0; i < total; i++) {
        People people;
        cin >> people.name;
        #pragma warning(disable:4996)
        scanf("%d/%d/%d", &people.year, &people.month, &people.day);
        people.day_total = people.year * 365 + people.month * 30 + people.day;
        //生日日期不合理
        people.day_total = day_now - people.day_total;
        if (people.day_total > 200*365 || people.day_total < 0) {
            continue;
        }
        peo.push_back(people);
    }
    //排序
    if (peo.size() == 0) {
        cout << "0";
        return 0;
    }
    sort(peo.begin(), peo.end(), comp);
    cout << peo.size() << " " << peo[0].name << " " << peo[peo.size()-1].name;
}

思路并不难,主要就是一边输入一边判断即可,很快完成,但是!!!

我在第三个点卡了比较久。。。错误如图:

段错误:刚好学过操作系统,段错误就是访问的内存已经超出程序所占有的内存范围了。通常产生段错误的有两种情况:1、指针越界(如数组等越界)2、在某个函数内开的数组过大,导致该函数的栈无法容纳数组,造成爆栈。

因此,开始了debug。。(真的自己去写测试案例是很不错的练习方式,最终被我测出来了)。为什么会指针越界,无非是访问vector的时候越界了,这种情况在数组有元素的情况下不会发生,而发生的情况就是:vector中一个元素都没有,也就是即便输入了n个人,最终都是不合法的。。

本文分享自微信公众号 - 卡尼慕(gh_40138f7dc7d3),作者:卡尼幕

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-09-07

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 1032 挖掘机技术哪家强 (20 分)

    为了用事实说明挖掘机技术到底哪家强,PAT 组织了一场挖掘机技能大赛。现请你根据比赛结果统计出技术最强的那个学校。

    可爱见见
  • 1070 结绳 (25 分)

    给定一段一段的绳子,你需要把它们串成一条绳。每次串连的时候,是把两段绳子对折,再如下图所示套接在一起。这样得到的绳子又被当成是另一段绳子,可以再次对折去跟另一段...

    可爱见见
  • 1069 微博转发抽奖 (20 分)

    小明 PAT 考了满分,高兴之余决定发起微博转发抽奖活动,从转发的网友中按顺序每隔 N 个人就发出一个红包。请你编写程序帮助他确定中奖名单。

    可爱见见
  • 没有一行代码,「2020 新冠肺炎记忆」这个项目却登上了 GitHub 中文趋势榜第一!

    每天早上醒来的第一眼,都会看一下实时疫情数据情况以及一些其他关于疫情方面的事宜,截至到 2020年2月10日13时,全国疫情实时数据累计确诊:40236例,累计...

    杰哥的IT之旅
  • 批流统一计算引擎的动力源泉—Flink Shuffle机制的重构与优化

    本文讲述的shuffle概念范围如下图虚线框所示,从上游算子产出数据到下游算子消费数据的全部流程,基本可以划分成三个子模块:

    王知无
  • iOS常用代码段

    控制器中代码设置 > storybord设置 > 全局设置 优先级高的会覆盖优先级低的配置,比如storybord中的设置了navigationbar的样式 那...

    剑行者
  • 15分钟带你了解虚拟内存

    这篇文章主要是想尽量直观的介绍虚拟内存的知识,而虚拟内存的知识不管作为在校学生的基础知识,面试的问题以及计算机程序本身性能的优化都有着重要的意义。而起意写这篇文...

    一心一怿
  • 机器学习模型的特性

    机器学习模型中有许多种不同方法可以用来解决分类和回归问题。对同一个问题来说,这些不同模型都可以被当成解决问题的黑箱来看待。然而,每种模型都源自于不同的...

    机器学习AI算法工程
  • 你的第一个装饰器是怎么写的

    它 们封装一个函数,并且这样或者那样的方式来修改它的行。现在你也许疑惑,我们在代码里并没有使用@符号?那只是一个简短的方式来生成一个被装饰的函数。

    Python知识大全
  • SQL干货 | 窗口函数的使用

    Mysql从8.0版本开始,也和Sql Server、Oracle一样支持在查询中使用窗口函数,本文将根据官方文档,通过实例介绍窗口函数并举例分组排序函数的使用...

    用户2769421

扫码关注云+社区

领取腾讯云代金券