PTA | 程序设计类实验辅助教学平台 (pintia.cn)
用公式表示为:birth=year×10000+month×100+day
C语言写法
#include<iostream>
#include<cstring>
using namespace std;
typedef long long LL;
int main()
{
int n=0;cin>>n;
int year,month,day;
LL max_age=20140906,min_age=18140906;
int valid_count=0;
char name[6] ,max_name[6],min_name[6];//名字用字符数组存,名字最长6个字符(题目有说)
for(int i=0;i<n;i++)
{
scanf("%s %d/%d/%d",&name,&year,&month,&day);
LL birth=year*10000+month*100+day;
if(birth<18140906 || birth>20140906);//非法日期,什么也不做
else
{
valid_count++;
//合法日期,开始求
if(birth<max_age) //找出最小的,最小的数即年龄最大的
{
//strcpy,后面的存到前面的,name存到max_name
strcpy(max_name,name); //max_name维护最大年龄姓名
max_age=birth; //max_age维护最大年龄
}
if(birth>min_age)
{
//更新为最小的
strcpy(min_name,name); //min_age维护最小年龄姓名
min_age=birth; //min_age维护年龄
}
}
}
if(valid_count)
printf("%d %s %s\n",valid_count,max_name,min_name);
else
printf("0\n");//这个点容易漏,即输入的都是不合理的数据
return 0;
}
其实一个日期就八位数,没有超过int类型,不用开long longh,只不过我的birthday放到里面了,每次都没有清空,就加下一个日期了,所以开的long long。可以在外面用int声明一下就不用开long long了。
C++写法
#include<bits/stdc++.h>
using namespace std;
int cnt;
int main()
{
int n = 0; cin >> n;
string name,bir;
string max_name,min_name;
string maxbirday = "20140906", minbirday = "18140906";
for(int i=0;i<n;i++)
{
cin>>name>>bir;
//提取一下日期(因为有/ / /)
string temp;
for(int j=0;j<bir.size();j++)
{
if(bir[j]>='0'&&bir[j]<='9')temp+=bir[j];
}
if(temp>"20140906"||temp<"18140906")
continue;
cnt++;
if(temp>minbirday)minbirday=temp,min_name=name;
if(temp<maxbirday)maxbirday=temp,max_name=name;
}
if(cnt){
cout<<cnt;
cout<<" "<<max_name<<" "<<min_name<<endl;
}
else cout<<"0\n";
return 0;
}
三刷
通过了19分:
#include<bits/stdc++.h>
using namespace std;
int cnt;
string id;
string bir;
string temp;
int main()
{
int n; cin >> n;
int min_age = 18140906, max_age = 20140906;
string max_id, min_id;
for (int i = 0; i < n; i++)
{
temp.clear();
string s;
cin >> id >> bir;
//提取一下日期
for (int i = 0; i < bir.size(); i++)
{
if (isdigit(bir[i]))temp += bir[i];
}
//cout << temp << endl;
//找出有效生日
int age = stoi(temp);
if (age >= 18140906 && age <= 20140906)
{
cnt++;
//最小的
if (age > min_age)
{
min_age = age;
min_id = id;
}
if (age < max_age)
{
max_age = age;
max_id = id;
}
}
}
cout << cnt << " " << max_id << " " << min_id << endl;
return 0;
}
这个格式错误是即使有效个数是0也要把0给输出出来,这个特写一下就通过了: