1028 人口普查 (20 分)
原题
https://pintia.cn/problem-sets/994805260223102976/problems/994805293282607104
思路
注意点:
1、闭区间,生日可以等于"1814/09/06"和"2014/09/06"
2、有效生日个数为0时,只输出0
思路:
1、虽然每个月份的天数不一样但不需要,计算具体的天数,只要比较大小即可。
本来想按20010512整型比较,但柳大佬提供更好的比较方式,string类型运算符直接比较大小。(不清楚什么原理,大概是依次比较的单个字符。顺带提一句,java的compareTo)
2、因为不需要输出每个人的对应生日,用两个变量记录最大年龄和最小年龄即可。
扩展知识点:
也可以使用C标准库#include
代码
学到知识点:
现在的C允许把一个结构赋值给另一个结构,但是数组不能这样做。也就是说,如果n_data和o_data都是相同类型的结构,可以这样做:
o_data = n_data; // 把一个结构赋值给另一个结构
#include
#include
using namespace std;
struct Person{
char name[6];
char birth[11];
}p;
int main()
{
int num,cnt=0;
cin >> num;
struct Person maxBirth ={"","1814/09/06"} ;
struct Person minBirth = {"","2014/09/06"};
for (int i = 0; i < num; i++)
{
scanf("%s %s",p.name,p.birth);
if(strcmp(p.birth,"1814/09/06")>=0&&strcmp(p.birth,"2014/09/06")<=0)//闭区间
{
cnt++;
if(strcmp(p.birth,maxBirth.birth)>=0) maxBirth=p;//现在的C允许把一个结构赋值给另一个结构
if(strcmp(p.birth,minBirth.birth)<=0) minBirth=p;
}
}
cout<
以下大佬代码
#include
using namespace std;
int main(void)
{
int n, cnt = 0;
string name, birth, maxname, minname, maxbirth = "1814/09/06", minbirth = "2014/09/06";
cin >> n;
for (int i = 0; i < n; i++)
{
cin >> name >> birth;
if (birth >= "1814/09/06" && birth <= "2014/09/06")//闭区间
{
cnt++;
if (birth >= maxbirth){
maxbirth = birth;
maxname=name;
}
if (birth <= minbirth){
minbirth = birth;
minname=name;
}
}
}
cout<