整理学习:

方式一:

    自定义 cmp() 比较函数

#include<cstdio>
#include<algorithm>
using namespace std;

struct Student{
    int id, a, b, c ,sum; //学号,语,数,英,总分 
}stu[300];

bool cmp(const Student &s1, const Student &s2){
    if(s1.sum==s2.sum){
        if(s1.a==s2.a)	return s1.id<s2.id;
        return s1.a>s2.a; 
    }
    return s1.sum>s2.sum;
}

int main(){
    int n;
    scanf("%d",&n);
    for(int i=0; i<n; i++){
        scanf("%d %d %d", &stu[i].a, &stu[i].b, &stu[i].c);
        stu[i].id = i+1 ;
        stu[i].sum = stu[i].a+stu[i].b+stu[i].c;
    }
    
    sort(stu,stu+n, cmp);
    
    for(int i=0;i<5;i++){
        printf("%d %d\n", stu[i].id, stu[i].sum);
    }
    return  0;
}

方式二:

    重载运算符。因为sort默认升序,重载<

#include<cstdio>
#include<algorithm>
using namespace std;

struct Student{
    int id, a, b, c ,sum; //学号,语,数,英,总分 
    bool operator < (const Student &x)const{
        return (sum==x.sum && a==x.a &&  id<x.id ) || (sum==x.sum && a>x.a) || (sum>x.sum);
    }
}stu[300];

int main(){
    int n;
    scanf("%d",&n);
    for(int i=0; i<n; i++){
        scanf("%d %d %d", &stu[i].a, &stu[i].b, &stu[i].c);
        stu[i].id = i+1 ;
        stu[i].sum = stu[i].a+stu[i].b+stu[i].c;
    }
    
    sort(stu,stu+n);
    
    for(int i=0;i<5;i++){
        printf("%d %d\n", stu[i].id, stu[i].sum);
    }
    return  0;
}


方式三:

题目只要前五名

使用选择排序,选出前五名,算法停止 

#include<cstdio>
#include<algorithm>
using namespace std;

struct Student{
    int id, a, b, c ,sum; //学号,语,数,英,总分 
    bool operator > (const Student &x)const{
        return (sum==x.sum && a==x.a &&  id<x.id ) || (sum==x.sum && a>x.a) || (sum>x.sum);
    }
}stu[300];

int main(){
	int n;
    scanf("%d",&n);
    for(int i=0; i<n; i++){
        scanf("%d %d %d", &stu[i].a, &stu[i].b, &stu[i].c);
        stu[i].id = i+1 ;
        stu[i].sum = stu[i].a+stu[i].b+stu[i].c;
    }
    
    for(int i=0; i<5; i++){
    	for(int j=i+1; j<n; j++)
    		if(stu[j]>stu[i]) swap(stu[i], stu[j]);
	}
    
    for(int i=0;i<5;i++){
        printf("%d %d\n", stu[i].id, stu[i].sum);
    }
    return  0;
}


点赞(0)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论