青叶


私信TA

用户名:15005097886

访问量:11473

签 名:

等  级
排  名 1949
经  验 2458
参赛次数 0
文章发表 28
年  龄 0
在职情况 学生
学  校
专  业

  自我简介:

整理学习:

方式一:

    自定义 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 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换

万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区