@[linruizhe111](/user/1028442)
>如果有两个同学生日相同,输入靠后的同学先输出
你的代码中需要体现这一点。
by yuanxiuan @ 2023-07-11 09:24:58
@[linruizhe111](/user/1028442) 在结构体中加入标识输入顺序的成员 `id` 可以使得在排序后仍可以确定输入顺序
```cpp
#include<bits/stdc++.h>
using namespace std;
const int kkk=39,miku=110;
struct data{
int y,m,d;
int id;
char name[kkk];
void input(int orz){
scanf("%s%d%d%d",name,&y,&m,&d);
id=orz;
}
void print(){
printf("%s\n",name);
}
} stu[miku];
bool cmp(data a,data b){
if(a.y!=b.y) return a.y<b.y;
if(a.m!=b.m) return a.m<b.m;
if(a.d!=b.d) return a.d<b.d;
return a.id<b.id;
}
int n;
int main(){
scanf("%d",&n);
for(int i=1; i<=n; i++) stu[i].input(i);
sort(stu+1,stu+1+n,cmp);
for(int i=1;i<=n;i++) stu[i].print();
return 0;
}
```
~~马蜂很乱建校了~~
by jijiaze @ 2023-07-11 09:30:31
我的代码只能拿到64分,请你自行思考并改正
by jijiaze @ 2023-07-11 09:31:48
#### 我的代码AC了
```cpp
#include<bits/stdc++.h>
using namespace std;
struct stu{
string name;
int yy;
int mm;
int dd;
double sum;
int bian;
}a[10005];
bool su(const stu &l,const stu &r){
if(l.sum!=r.sum){
return l.sum<r.sum;
}
if(l.sum==r.sum){
return l.sum>r.sum;
}
}
int main(){
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++){
cin>>a[i].name>>a[i].yy>>a[i].mm>>a[i].dd;
a[i].sum=1.0*a[i].yy+1.0*a[i].mm/12+a[i].dd*1.0/365;
a[i].bian=i;
}
sort(a+1,a+n+1,su);
for(int i=1;i<=n;i++){
if(a[i].sum==a[i+1].sum&&a[i].bian<a[i+1].bian){
string s;
s=a[i].name;
a[i].name=a[i+1].name;
a[i+1].name=s;
}
cout<<a[i].name<<endl;
}
return 0;
}
```
就你可以在node结构体中加一个编号来判断是靠前的还是靠后的
##### 求关TT
by wyl123ly @ 2023-07-21 14:44:05