题解 P1104 【生日】
蒟蒻一点小建议
看着题解里的大佬们用的各种神仙做法,我一个连结构体都一团浆糊的蒟蒻真的深感无力。。。
不过幸运的是我在买车票时由身份证得到了一个启发
所以在这里推荐一个稍微简单一点的做法吧
我就不贴完整代码了
首先呢我们要搞清楚一个重要规律
y=year,m=month,d=day,下同(小学都学过就不解释啦~)
常识告诉我们,表示年份的数字越小,生日越大(例如1990和1995);年份相同时,表示月份的数字越小生日越大(例如1990.7和1990.3);月份相同时,表示日期的数字越小生日越大(例如1990.7.31和1990.7.3)。【废话】
所以我们为什么不可以把年+月+日摞成一个数字(生日数)呢?
我用测试数据举个例子,yangchu是1992.4.23, qiujingya是1993.10.13,luowen是1991.8.1, 我们把他写成yangchu,19920423;qiujingya,19931013,luowen,19910801的形式,其实就是省略中间的分割点重头到尾连在一起,就和身份证上显示生日的数一样
根据数字越小,生日越大的原理,我们可以用自带从小到大排序功能的sort函数对所有生日数进行排序,然后根据生日数的大小进行名字的输出不就行了吗?
以下是代码核心!
此处播放心太软
for (int 1=1;i<=n;i++) //循环输入开始
{
cin>>y[i]>>m[i]>>d[i]; //输入年份,月份和日期
int s[i]=y[i]*10000+m[i]*100+d[i]*1; //计算生日数
}
sort(s+1,s+n+1); //对生日数进行排序
连结构体都不用,是不是很简单呢?