问题标题: 酷町堂:1480 考试排排序

0
0
已解决
许孟星
许孟星
高级守护
高级守护

1480   考试排排序

#include<bits/stdc++.h>
using namespace std;
struct score{  //定义结构体score
    int c;
    double e;//三科
}f[105]; 
/*
对于这样一个结构体,我们要想按照学生的总分从大到小排,总分相同的,按照语文成绩从大到小排,语文成绩相同的,按照数学成绩从大到小排序。需要用到以下的方法:
我们可以使用sort()来对结构体数组进行排序,排序规则可以在cmp函数里定义。
在结构体下方,主函数上方定义cmp函数。
cmp函数里的形参是两个结构体变量 ,返回值是bool类型的。
如:
*/
bool cmp (score a,score b){
    return a.e>b.e;
}
int main(){
    int n,m;
    cin>>n>>m;
    for(int i=1;i<=n;i++) cin>>f[i].c>>f[i].e;
    sort(f+1,f+1+n,cmp);
    cout<<f[m].c<<" "<<f[m].e;
    return 0;
}

写到这。

许孟星在2021-07-30 19:43:41追加了内容

更正:f[10000];


1
已采纳
李奕歌
李奕歌
初级天翼
初级天翼

结构体,cmp函数,剩下自己想

struct man{
    long long name;
    double cj;
};
man a[100005];
bool cmp(man x,man y){
    if(x.cj==y.cj) return x.name<y.name;
    else return x.cj>y.cj;
}

 

0
王文博
王文博
缔造者之神
缔造者之神

cmp函数出了点问题(马虎导致的)

c是学号,学号小的先输出(当一样的时候),而你这个并没有进行判断。

cmp改为以下核心即可AC:

bool cmp(score a,score b)
{
    if(a.e!=b.e) return a.e>b.e;
    return a.c<b.c;
}

望采纳!如果有问题记得找我!

0
许孟星
许孟星
高级守护
高级守护

许孟星在2021-07-30 19:51:51追加了内容

Wrong Answer!

许孟星在2021-07-30 19:53:05追加了内容

@王文博

0
我要回答