zsjaaaxyzgfwpl1314 @ 2023-07-03 15:16:16
#include<bits/stdc++.h>
using namespace std;
struct stu
{
string name;
int sr_1,sr_2,sr_3,sr;
}oi[100];
bool px(int q1,int q2)
{
if(q1>q2)
{
return true;
}
else
{
return false;
}
}
int main()
{
int n;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>oi[i].name>>oi[i].sr_1>>oi[i].sr_2>>oi[i].sr_3;
oi[i].sr=oi[i].sr_1*365+oi[i].sr_2*30+oi[i].sr;
}
for(int i=0;i<n;i++)
{
for(int j=i;j<n;j++)
{
int boo=(px((oi[i].sr),(oi[j].sr)));
if(boo==false)
{
swap(oi[i],oi[j]);
}
}
}
for(int i=0;i<n;i++)
{
cout<<oi[i].name;
}
return 0;
}
CE4次,全WA两次,求掉
by KDL_ANIPLEX @ 2023-07-03 15:40:31
false应该改为true吧...
(出生日越小岁数更大)
by kk1501201 @ 2023-07-03 15:40:31
1.没换行 2.输出顺序反了 最后应改为:
for(int i=n-1;i>=0;i--)
{
cout<<oi[i].name<<endl;
}
这是最明显的两个错误
此外你都用结构体了,完全没必要用
oi[i].sr=oi[i].sr_1*365+oi[i].sr_2*30+oi[i].sr;
也可以不用冒泡换(自认为)更好用的sort(缺点:快排不稳定,最好手写cmp),然后自定义cmp或者重载运算符 我在你基础上改的AC代码:
#include<bits/stdc++.h>
using namespace std;
struct stu
{
string name;
int sr_1,sr_2,sr_3;
int level;
bool operator <(stu b)
{
if(sr_1!=b.sr_1) return sr_1>b.sr_1;
if(sr_2!=b.sr_2) return sr_2>b.sr_2;
if(sr_3!=b.sr_3) return sr_3>b.sr_3;
return level<b.level;
}
}oi[100];
int main()
{
int n;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>oi[i].name>>oi[i].sr_1>>oi[i].sr_2>>oi[i].sr_3;
oi[i].level=i;
}
sort(oi,oi+n);
for(int i=n-1;i>=0;i--)
{
cout<<oi[i].name<<endl;
}
return 0;
}
by calm_alone @ 2023-07-03 15:43:13
@zsjaaaxy 你要是这么写,计算总日期的时候得判断是哪个月,是否是闰年,但凡有点常识都会知道,所以你得把那个改了,而且你也可以直接在结构体重载小于号,求出值之后sort一变就行
by zsjaaaxyzgfwpl1314 @ 2023-07-03 15:46:14
对不起 我疏忽了
谢谢 @calm_alone @kk1501201 @XiaoKaiWen1
此贴结(验证码 2b4n 祭)