求助%%%

P1104 生日

@[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


|