某城镇进行人口普查,得到了全体居民的生日。现请你写个程序,找出镇上最年长和最年轻的人。
这里确保每个输入的日期都是合法的,但不一定是合理的——假设已知镇上没有超过 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");
}
PAT乙1028 求求各位大哥大嫂,萌新测试点2死活过不去
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
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仿真压阻传感器