前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >1028 人口普查 (20 分)

1028 人口普查 (20 分)

作者头像
可爱见见
发布2019-09-09 15:56:58
4530
发布2019-09-09 15:56:58
举报
文章被收录于专栏:卡尼慕卡尼慕

1028 人口普查 (20 分)

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

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

输入格式:

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

输出格式:

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

输入样例:

代码语言:javascript
复制
5
John 2001/05/12
Tom 1814/09/06
Ann 2121/01/30
James 1814/09/05
Steve 1967/11/20

输出样例:

代码语言:javascript
复制
3 Tom John

我的代码

代码语言:javascript
复制
// 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个人,最终都是不合法的。。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-09-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 卡尼慕 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 输入格式:
  • 输出格式:
  • 输入样例:
  • 输出样例:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档