@[Volcano_j666](/user/636849) 输出格式中,“如果有两个同学生日相同,输入靠后的同学先输出”,您这个代码是先输入的输出了,可以改一下。
by tangrunxi @ 2022-05-28 17:54:50
@[tangrunxi](/user/231147) 应该怎么改,您能具体说一下吗,谢谢
by HiCode2009 @ 2022-05-28 17:56:01
@[Volcano_j666](/user/636849)
直接加
```
else if(a[j].y==a[j+1].y&&a[j].m==a[j+1].m&&a[j].d==a[j+1].d)swap(a[j],a[j+1]);
```
可得80分(一些往前的再排顺序会乱)
加一个a[i].qi(输入顺序)可得100见我代码
```
#include<bits/stdc++.h>
using namespace std;
struct student{
string name;
long long y,m,d,qi;
}a[1001];
long long n;
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{cin>>a[i].name>>a[i].y>>a[i].m>>a[i].d;a[i].qi=i;}
for(int i=1;i<=n;i++)
for(int j=1;j<=n-1;j++)
{
if(a[j].y>a[j+1].y) swap(a[j],a[j+1]);
else if(a[j].y==a[j+1].y&&a[j].m>a[j+1].m) swap(a[j],a[j+1]);
else if(a[j].y==a[j+1].y&&a[j].m==a[j+1].m&&a[j].d>a[j+1].d) swap(a[j],a[j+1]);
else if(a[j].y==a[j+1].y&&a[j].m==a[j+1].m&&a[j].d==a[j+1].d&&a[j].qi<a[j+1].qi)swap(a[j],a[j+1]);
}
for(int i=1;i<=n;i++) cout<<a[i].name<<endl;
return 0;
}
```
by mzyczzx @ 2022-05-28 21:41:12
@[mzyczzx](/user/616407) 但是这样到后面不也会乱吗,我觉得有点巧合吧
by HiCode2009 @ 2022-06-01 18:05:57
@[Volcano_j666](/user/636849) 不会乱因为swap函数是把一整个结构体两边全部换所以qi也会换,举例:
输入
5
yjr1 2000 2 2
yjr2 2001 2 2
yjr3 2001 2 2
yjr4 2001 2 2
yjr5 2002 2 2
原序1,2,3,4,5
2与3换:1,3,2,4,5
2与4换:1,3,4,2,5
3与4换:1,4,3,2,5
这样顺序不会乱当然实在拿不准就用sort
详见第一篇题解,后来图论啥的还会用
by mzyczzx @ 2022-06-02 19:30:15