排序题

1.https://www.acwing.com/problem/content/431/

主要是重载小于号和自己写比较函数两种方法,但是之前不会

现在会了就好

####重载小于号

 1 #include <iostream>
 2 #include <algorithm>
 3 #include <cstring>
 4 using namespace std;
 5 const int N = 310;
 6 struct Person{
 7     int id , sum , a, b, c;
 8     bool operator< (Person& t) const{
 9         if(sum!=t.sum) return sum>t.sum;
10         if(a!=t.a) return a>t.a;
11         return id<t.id;
12     }
13 }q[N];
14 int main(){
15     int n;
16     scanf("%d" ,&n);
17     int a,b,c;
18     for(int i = 1 ; i <= n ; i++){
19         scanf("%d%d%d" , &a , &b , &c);
20         q[i] = {i,a+b+c , a ,b , c};
21     }
22     sort(q+1 , q+n+1);
23     for(int i = 1 ; i <= 5 ; i++){
24         printf("%d %d\n" , q[i].id , q[i].sum);
25     }
26     return 0;
27 }

####自定义函数

#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
const int N = 310;
struct Person{
    int id , sum , a, b, c;
}q[N];
bool cmp(Person &a , Person &b){
    if(a.sum!=b.sum) return a.sum>b.sum;
    if(a.a!=b.a) return a.a>b.a;
    return a.id<b.id;
}

int main(){
    int n;
    scanf("%d" ,&n);
    int a,b,c;
    for(int i = 1 ; i <= n ; i++){
        scanf("%d%d%d" , &a , &b , &c);
        q[i] = {i,a+b+c , a ,b , c};
    }
    sort(q+1 , q+n+1 , cmp);//这里的排序开始结束看一下
    for(int i = 1 ; i <= 5 ; i++){
        printf("%d %d\n" , q[i].id , q[i].sum);
    }
    return 0;
}

都用到了结构体,这是最基本的东西

posted @ 2021-11-20 22:43  乐池  阅读(56)  评论(0)    收藏  举报