大佬帮忙看看!80分!求助!

P1093 [NOIP2007 普及组] 奖学金

_JEB_ @ 2020-03-02 10:39:54

#include<bits/stdc++.h>
using namespace std;
struct student{
    int name;
    int c,m,e;
    int total;     
}a[501];
int n;
bool comp1(student x,student y){
    if(x.total==y.total){
        if(x.c>y.c){
            return x.c>y.c;
        }
        if(x.c==y.c){
            return x.name<y.name; 
        }
    }
    if(x.total!=y.total){
        return x.total>y.total;
    }
}
int main(){
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>a[i].c>>a[i].m>>a[i].e;
        a[i].total=a[i].c+a[i].m+a[i].e;
        a[i].name=i;
    }
    sort(a+1,a+n+1,comp1);
    for(int i=1;i<=5;i++){
        cout<<a[i].name<<" "<<a[i].total<<endl;
    }
}   

by black_trees @ 2020-03-02 10:48:08

你可以试试不用sort 自己手打冒泡


by liqingyang @ 2020-03-02 10:48:29

sort本身没问题啊


by liqingyang @ 2020-03-02 10:48:49

你可以看看sort参数是否有问题


by black_trees @ 2020-03-02 10:50:56

如果两个同学总分相同,再按语文成绩从高到低排序,如果两个同学总分和语文成绩都相同,那么规定学号小的同学 排在前面,这样,每个学生的排序是唯一确定的。如果两个同学总分相同,再按语文成绩从高到低排序,如果两个同学总分和语文成绩都相同,那么规定学号小的同学 排在前面,这样,每个学生的排序是唯一确定的。


by black_trees @ 2020-03-02 10:51:28

在sort的参数里加条件判断应该可以


by black_trees @ 2020-03-02 10:53:18

for(int i=1;i<=n;i++){
        for(int j=1;j<=n-1;j++){
            if(stu[i].sum>stu[j].sum){
                swap(stu[i],stu[j]);
            }
            if(stu[i].sum==stu[j].sum&&stu[i].a>stu[j].a){
                swap(stu[i],stu[j]);
            }
        }
    }

我的排序里加了条件特判,在compl函数里加类似特判也许可以


by black_trees @ 2020-03-02 10:55:38

@Charlie___j 你应该是没有加成绩相同时比较语文的特判


by _JEB_ @ 2020-03-02 11:30:17

我加了啊

@我真的很辣鸡


by _JEB_ @ 2020-03-02 13:04:18

#include<bits/stdc++.h>
using namespace std;
struct student{
    int name;
    int c,m,e;
    int total;     
}a[501];
int n;
bool comp1(student x,student y){
    if(x.total==y.total){
        if(x.c>y.c){
            return x.c>y.c;
        }else if(x.c<y.c)
            return x.c>y.c;
        else if(x.total==y.total&&x.c==y.c){ 
            return x.name<y.name;
        }
    }
    if(x.total!=y.total){
        return x.total>y.total;
    }
}
int main(){
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>a[i].c>>a[i].m>>a[i].e;
        a[i].total=a[i].c+a[i].m+a[i].e;
        a[i].name=i;

    }
    sort(a+1,a+n+1,comp1);                                                                                                                                                                                                                                                                                                                                                                                         
    for(int i=1;i<=5;i++){
        cout<<a[i].name<<" "<<a[i].total<<endl;
    }
}

我自己看了一下,if没有起效果,已AC,谢谢!

@我真的很辣鸡

@liqingyang


by liqingyang @ 2020-03-02 13:43:48

@Charlie___j 不客气


|