这道题花了我半个多小时,对呀乙级算是挺多时间的了。
我写的代码是
#include<cstdio> struct People
{
char name[];
int year;
int month;
int day;
}old,young,temp; int compare(People a, People b) {
if ((a.year > ) || (a.year == && a.month > ) || (a.year == && a.month == && a.day > )) //判断是否超过当前日期
return ;
if((a.year < ) || (a.year == && a.month < ) || (a.year == && a.month == && a.day < ))//判断是否大于200岁
return ;
if (a.year < b.year || (a.year == b.year&&a.month < b.month) || (a.year == b.year && a.month == b.month && a.day < b.day))//满足上面两个条件才比较两个日期的大小
return -;
if (a.year > b.year || (a.year == b.year&&a.month > b.month) || (a.year == b.year && a.month == b.month && a.day > b.day))//-1是小于,1是大于
return ;
return ; }
int main() {
int n,count=,flag1,flag2;
young = { "",,, };
old = { "",,,};
scanf("%d", &n);
while (n--)
{
scanf("%s %d/%d/%d", &temp.name, &temp.year, &temp.month, &temp.day);
flag1 = compare(temp, old);//flag1和flag2都是为了保存判断状态
if ( flag1== -)
{
old = temp;
}
flag2 = compare(temp, young);
if ( flag2== )
{
young = temp;
}
if (flag1 || flag2)//如果两次判断都不为零,也就是满足条件,那就count+1。
{
count++;
}
}
if (count == ) printf("");
else printf("%d %s %s", count, old.name, young.name);
return ;
}
注意点:
如果所有人的生日都不满足条件,记得必须单独输出一个0;否则会因为多输出空格导致格式错误的。
再一次体会到PATOJ比牛客OJ更严格。
old = temp;
这一行是让直接把结构体的值赋给另一个结构体。
但是用g++编译器会报错,提示结构体并没有重载=
但是用clang++编译器就不会报错。我查了一下clang++与g++的区别
我在我的VS2017上编译很正常。
其他底层的我也不清楚了,反正以后用clang++就好。