1028 人口普查

mac2026-01-14  7

题目链接 思路: 利用结构体,将符合要求的存入结构体数组,对数组排序,得到答案; 不知道哪里出错有两个测点不对;

// ConsoleApplication1.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 #pragma warning(disable:4996); #include <iostream> #include<stdio.h> #include<algorithm> #include<string.h> #include<stack> using namespace std; struct man { char name[10]; int year; int month; int day; bool operator <(const man& a)const { if (year != a.year) return year < a.year; else if (month != a.month) return month < a.month; else return day < a.day; } }a[100005], a2[100005]; int main() { int n; cin >> n; int count = 0; for (int i = 0;i < n;i++) { getchar(); scanf("%s %d/%d/%d", a[i].name, &a[i].year, &a[i].month, &a[i].day); if (a[i].year > 2014 || a[i].year < 1814 || (a[i].year == 2014 && a[i].month > 9) || (a[i].year == 2014 && a[i].month == 9 && a[i].day > 6) || (a[i].year == 1814 && a[i].month == 9 && a[i].day < 6) || (a[i].year == 1814 && a[i].month < 9)) continue; else { strcpy(a2[count++].name, a[i].name); a2[count].year = a[i].year; a2[count].month = a[i].month; a2[count].day = a[i].day; } } if (count) { sort(a2, a2 + count); printf("%d %s %s\n", count, a2[count - 1].name, a2[0].name); } else printf("0\n"); return 0; }

借鉴了一个博主的:用一个long long型变量 = year10000+month100+day来比较数据;

#include<stdio.h> #include<string.h> int main(){ int n; int year,month,day; int count = 0; //有效年龄个数 char name[6], max_name[6], min_name[6]; long long maxAge = 20140907, minAge = 18140905; scanf("%d",&n); for(int i = 0; i < n; i++){ scanf("%s %d/%d/%d",&name,&year,&month,&day); //方便年龄比较 long long birth = year*10000+month*100+day; //过滤不合理日期 if(birth < 18140906 || birth > 20140906); else{ //得到最年长和最年轻的人 count++; if(birth < maxAge){ //得到最年长 strcpy(max_name,name); maxAge = birth; } if(birth > minAge){ //得到最年轻 strcpy(min_name,name); minAge = birth; } } } if(count) printf("%d %s %s\n",count,max_name,min_name); else printf("0\n"); return 0; }
最新回复(0)