• (sort+结构体)成绩排序


    sort 使用需#include<algorithm>

    sort函数的3个参数:

    1.需要排序数组的起始地址

    2.需要排序数组的结束地址

    3.排序函数 (若不写排序函数,默认为整数的从小到大排序)

    sort(arr,arr+n,cmp);

    对结构体排序的使用方法:

    有一个node类型的数组node arr[100],想对它进行排序:

    1.先按a值升序排列

    2.如果a值相同,再按b值降序排列

    3.如果b还相同,就按c升序排列。

    就可以写这样一个比较函数:

    struct node{
        int a;
        int b;
        double c;
    };
    bool cmp(node x,node y){
        if(x.a!=y.a) return x.a>y.a;
        if(x.b!=y.b) return x.b>y.b;
        return x.c<y.c;
    }

    例:给出n个学生的成绩,将这些学生按成绩排序,排序规则:总分高的在前;总分相同,数学成绩高的在前;总分与数学相同,英语高的在前;总分数学英语都相同,学号小的在前

    输入格式

      第一行一个正整数n,表示学生人数
      接下来n行每行3个0~100的整数,第i行表示学号为i的学生的数学、英语、语文成绩
    输出格式
      输出n行,每行表示一个学生的数学成绩、英语成绩、语文成绩、学号
      按排序后的顺序输出
    样例输入
        2
        1 2 3
        2 3 4
    样例输出
        2 3 4 2
        1 2 3 1
    #include <iostream>
    #include <stdlib.h>
    #include <math.h>
    #include <string.h> 
    #include <algorithm>
    using namespace std;
    
    int n,m;
    int ans=0;
    bool vis[105];
    int dp[105],aa[105];
    struct node{
        int id;
        int math;
        int eglish;
        int chinese;
        int all;
    };
    bool cmp(node x,node y){
        if(x.all!=y.all) return x.all>y.all;
        if(x.math!=y.math) return x.math>y.math;
        if(x.eglish!=y.eglish) return x.eglish>y.eglish;
        return x.id<y.id;
    }
    int main() {
        node arr[105];
        cin>>n;
        node stu;
        for(int i=0;i<n;i++){
            stu.id=i+1;
            cin>>stu.math>>stu.eglish>>stu.chinese;
            stu.all=stu.math+stu.eglish+stu.chinese;
            arr[i]=stu;
        }
        sort(arr,arr+n,cmp);
        for(int i=0;i<n;i++){
            cout<<arr[i].math<<" "<<arr[i].eglish<<" "<<arr[i].chinese<<" "<<arr[i].id<<endl;
        }
        return 0;
    }
  • 相关阅读:
    L1-046. 整除光棍
    判断素数
    L1-025. 正整数A+B
    L1-023. 输出GPLT
    L1-020. 帅到没朋友
    L1-016. 查验身份证
    L1-011. A-B
    UVa 400 Unix Is命令
    Uva 136 丑数
    The Preliminary Contest for ICPC Asia Xuzhou 2019 K. Center
  • 原文地址:https://www.cnblogs.com/xusi/p/12539958.html
Copyright © 2020-2023  润新知