PAT刷题-排序:1062 Talent and Virtue

巧记排序函数:标准库的sort()函数,保证排序后,数据的顺序与排序函数中的不等关系一致(好像也不巧)

#include<iostream>
#include<algorithm>


using namespace std;


typedef struct
{
    long int ID_Number;
    int Virtue_Grade, Talent_Grade, Total_Grade, type;
} Man;

bool cmp(Man m1,Man m2)
{
    //比较函数的规则记忆:排序后的结果与函数中的不等号一致
    if(m1.type!=m2.type)
        return m1.type < m2.type;
    else if(m1.Total_Grade!=m2.Total_Grade)
        return m1.Total_Grade > m2.Total_Grade;
    else if(m1.Virtue_Grade!=m2.Virtue_Grade)
        return m1.Virtue_Grade > m2.Virtue_Grade;
    else if(m1.ID_Number!=m2.ID_Number)
        return m1.ID_Number < m2.ID_Number;
}

int main()
{
    int n, low, high, i, virtue, talent, k = 0;
    long int id;
    Man man[100100];

    scanf("%d %d %d", &n, &low, &high);
    for (i = 0; i < n;i++)
    {
        scanf("%ld %d %d", &id, &virtue, &talent);
        if(virtue>=low&&talent>=low)
        {
            man[k].ID_Number = id;
            man[k].Talent_Grade = talent;
            man[k].Virtue_Grade = virtue;
            man[k].Total_Grade = talent + virtue;
            if(virtue>=high&&talent>=high)
                man[k].type = 1;
            else if(virtue>=high&&talent<high)
                man[k].type = 2;
            else if(virtue>=talent)
                man[k].type = 3;
            else
                man[k].type = 4;
            k++;
        }
    }
    sort(man, man + k, cmp);
    printf("%d\n", k);
    for (i = 0; i < k;i++)
        printf("%ld %d %d\n", man[i].ID_Number, man[i].Virtue_Grade, man[i].Talent_Grade);
    getchar();
}

 疏忽点:

1.没有考虑到数据要分类,而这是问题的关键

2.数据编号(ID_Number),要按从小到大排序

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值