我们大概分析一下这道题,就可以发现这是一个典型的结构体排序问题,如果有人不会,大体思路放在下面
创建结构体,把姓名以及对应的年月日放进去,然后用结构体数组a[101]来输入。
输入完之后,就用algorithm头文件里的sort去排序
如果循环是0到n-1,就用sort(a,a+n,cmp);
循环是1到n,就用sort(a+1,a+n+1,cmp);
由于结构体数组不能直接用sort排序,所以就得用bool类型的函数cmp来进一步去排序,cmp代码我放在文章最后面,需要的可以看一看。
cmp排序完成后,就可以直接输出了
这就是80分的基础操作
很多人做到这一步就几乎不会了,但
AC看似很难,实际上十分的简单 我们只需好好对题目 读题目去吧!!!
通过几分钟的仔细阅读,我发现了这个:
(如果有两个同学生日相同,输入靠后的同学先输出)
所以我们只需在结构体增加一个顺序(例:int xs) 然后循环输入时就将xs标为循环变量i;
然后再cmp函数里最后return a.day<b.day的后面加个特判,就是判断a.day和b.day是否相同,然后在判断相同的else那块写上:
return a.sx>b.sx;//顺序靠后的先输出
下面是cmp函数:
80分cmp:
bool cmp(people a,people b)//我的结构体用的名称是people
{
if(a.year!=b.year)
{
return a.year<b.year;//年越小年龄越大
}
else if(a.month!=b.month)
{
return a.month<b.month;//月同理
}
else
{
return a.day<b.day;//日也一样
}
}
100cmp:
bool cmp(people a,people b)
{
if(a.year!=b.year)
{
return a.year<b.year;
}
else if(a.month!=b.month)
{
return a.month<b.month;
}
else if(a.day!=b.day)
{
return a.day<b.day;
}
else//我用的是sx,你们可以用其他的
{
return a.sx>b.sx;//输入靠后的先输出
}
}