全WA求助

P1104 生日

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 祭)


|