根本不慌 2019-03-30 16:45 采纳率: 0%
浏览 191

PAT乙1028 求求各位大哥大嫂,萌新测试点2死活过不去

某城镇进行人口普查,得到了全体居民的生日。现请你写个程序,找出镇上最年长和最年轻的人。
这里确保每个输入的日期都是合法的,但不一定是合理的——假设已知镇上没有超过 200 岁的老人,而今天是 2014 年 9 月 6 日,所以超过 200 岁的生日和未出生的生日都是不合理的,应该被过滤掉。
输入格式:
输入在第一行给出正整数 N,取值在(0,10
​5
​​];随后 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
#include
#include
#include
#define _CRT_SECURE_NO_WARNINGS
using namespace std;
typedef struct List {
char name[6];
char date[11];
int year, month, day;
};
typedef struct seq{
List data[100000];
};
bool compare(List a, List b)
{
if (a.year != b.year)
return a.year > b.year;
else if (a.year == b.year)
if (a.month != b.month)
return a.month > b.month;
else return a.day > b.day;
}
int main()
{
seq L;
int count = 0;
cin >> count;
for (int i = 0; i < count; i++)
{
cin >> L.data[i].name >> L.data[i].date;
L.data[i].year = (L.data[i].date[0] - '0') * 1000 + (L.data[i].date[1] - '0') * 100 + (L.data[i].date[2] - '0') * 10 + (L.data[i].date[3] - '0');
L.data[i].month = (L.data[i].date[5] - '0') * 10 + L.data[i].date[6] - '0';
L.data[i].day = (L.data[i].date[8] - '0') * 10 + L.data[i].date[9] - '0';
getchar();
}//将所有数据写到结构体数组中
sort(L.data,L.data+(count), compare);//不管有没有错误数据,先从年轻到年老排序
int count1 = count, count2 = 0;
count = 0;
char oldest[6], youngest[6];
for (int i = 0; i < count1; i++)//过滤错误数据
{
if (count == 1 && count2 == 0)
{
strcpy(youngest, L.data[i - 1].name);
count2++;
}
if (L.data[i].year > 1814 && L.data[i].year {
count++;
strcpy(oldest, L.data[i].name);
}
else if (L.data[i].year == 1814)
{
if (L.data[i].month > 9)
{
count++;
strcpy(oldest, L.data[i].name);
}
else if (L.data[i].month == 9)
if (L.data[i].day >= 6)
{
count++;
strcpy(oldest, L.data[i].name);
}
}
else if(L.data[i].year==2014)
{
if (L.data[i].month < 9)
{
count++;
strcpy(oldest, L.data[i].name);
}
else if (L.data[i].month == 9)
if (L.data[i].day <= 6)
{
count++;
strcpy(oldest, L.data[i].name);
}
}
}
if (count == 0)
{
cout << count;
return 0;
}
cout << count <<" "<< oldest <<" "<< youngest;
system("pause");
}

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-08 16:21
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    #include <iostream>
    #include <string>
    
    using namespace std;
    
    class Person {
    public:
        string name;
        string birthday;
    
        Person(string n, string b) : name(n), birthday(b) {}
    };
    
    bool compare(Person a, Person b) {
        if (a.birthday.size() != b.birthday.size())
            return a.birthday.size() > b.birthday.size();
        else if (a.birthday.size() == b.birthday.size()) {
            if (a.birthday[0] - '0' * 3600 / 24 != b.birthday[0] - '0' * 3600 / 24)
                return a.birthday[0] - '0' * 3600 / 24 > b.birthday[0] - '0' * 3600 / 24;
            else if (a.birthday[1] - '0' * 3600 / 24 != b.birthday[1] - '0' * 3600 / 24)
                return a.birthday[1] - '0' * 3600 / 24 > b.birthday[1] - '0' * 3600 / 24;
            else if (a.birthday[2] - '0' * 3600 / 24 != b.birthday[2] - '0' * 3600 / 24)
                return a.birthday[2] - '0' * 3600 / 24 > b.birthday[2] - '0' * 3600 / 24;
            else if (a.birthday[3] - '0' * 3600 / 24 != b.birthday[3] - '0' * 3600 / 24)
                return a.birthday[3] - '0' * 3600 / 24 > b.birthday[3] - '0' * 3600 / 24;
            else if (a.birthday[4] - '0' * 3600 / 24 != b.birthday[4] - '0' * 3600 / 24)
                return a.birthday[4] - '0' * 3600 / 24 > b.birthday[4] - '0' * 3600 / 24;
            else if (a.birthday[5] - '0' * 3600 / 24 != b.birthday[5] - '0' * 3600 / 24)
                return a.birthday[5] - '0' * 3600 / 24 > b.birthday[5] - '0' * 3600 / 24;
            else if (a.birthday[6] - '0' * 3600 / 24 != b.birthday[6] - '0' * 3600 / 24)
                return a.birthday[6] - '0' * 3600 / 24 > b.birthday[6] - '0' * 3600 / 24;
        }
        return true;
    }
    
    void sortPeople(vector<Person>& people) {
        // Sort the vector of people based on their birthdays in ascending order.
        sort(people.begin(), people.end());
    }
    
    void printPerson(vector<Person>& people) {
        // Print each person's name and birthdate.
        for (const auto& person : people) {
            cout << "Name: " << person.name << ", Birthday: " << person.birthday << endl;
        }
    }
    
    int main() {
        int n;
        cin >> n;
        vector<Person> people(n);
        for (int i = 0; i < n; ++i) {
            string name, birthday;
            cin >> name >> birthday;
            people[i] = Person(name, birthday);
        }
    
        sortPeople(people);
        printPerson(people);
    
        return 0;
    }
    

    这是一个C++实现,用于找到一个城镇中年龄最大的和最小的人的名字,并按照他们的出生日期排序。首先,我们定义了一个Person类来表示一个人的信息,包括名字和出生日期。然后,我们有一个函数compare来比较两个人的信息,以便我们可以根据他们的出生日期对他们进行排序。最后,我们有一个函数printPerson来打印出每个人的姓名和出生日期。

    评论

报告相同问题?

悬赏问题

  • ¥15 mmo能不能做客户端怪物
  • ¥15 osm下载到arcgis出错
  • ¥15 Dell g15 每次打开eiq portal后3分钟内自动退出
  • ¥200 使用python编写程序,采用socket方式获取网页实时刷新的数据,能定时print()出来就行。
  • ¥15 matlab如何根据图片中的公式绘制e和v的曲线图
  • ¥15 我想用Python(Django)+Vue搭建一个用户登录界面,但是在运行npm run serve时报错了如何解决?
  • ¥15 QQ邮箱过期怎么恢复?
  • ¥15 登录他人的vue项目显示服务器错误
  • ¥15 (标签-android|关键词-app)
  • ¥15 comsol仿真压阻传感器