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

0
0
已解决
汪一豪
汪一豪
中级守护
中级守护

题目描述 Description

在期末考试结束后,已知了学生的学号和考试成绩,请聪明的你输出第m名学生的学号和成绩。(如果有若干个相同的成绩,则学号小的优先输出)。

输入描述 Input Description

输入n+1行;
第一行输入整数n,m;n表示学生人数,m表示第m名的学生。其中0<m<=n<10000。
剩下的n行,每行包括一个学号(整数10000~99999)和一个成绩,中间用一个空格分隔。

输出描述 Output Description

输出为一行,输出第m名学生的学号和成绩(保留一位小数),中间用空格分隔。

样例输入 Sample Input

5 3 16001 77.5 16002 90.5 16003 61.5 16004 68.0 16005 73.5

样例输出 Sample Output

16005 73.5

数据范围及提示 Data Size & Hint

成绩保留一位小数


0
已采纳
张展嘉
张展嘉
新手天翼
新手天翼

这是我今天的打卡题

张展嘉在2021-05-10 21:25:25追加了内容
struct p{
    int a;
    double b;
}z[10001];
bool cmp(p x,p y){
    if(x.b!=y.b){
        return x.b>y.b;
    }
    return x.a<y.a;
}

 

主函数你自己想

0
葛畅
葛畅
修练者
修练者
bool cmp(stu x,stu y)
{
    if(x.b!=y.b)return x.b>y.b;
    return x.s<y.s;
}

100分

分数是大的在前,小的在后。序号是小的在前,大的在后。

0
李奕歌
李奕歌
初级天翼
初级天翼
#include<bits/stdc++.h>
using namespace std;
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;
}

int main(){
    int n,m;
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        cin>>a[i].name>>a[i].cj;
    }
    sort(a+1,a+n+1,cmp);
    cout<<a[m].name<<" ";
    printf("%.1f",a[m].cj);
    cout<<"\n";
    return 0;
}

0
李奕歌
李奕歌
初级天翼
初级天翼

30分

#include<bits/stdc++.h>
using namespace std;
struct man{
    long long num;
    double cj;
};
man a[10005];
bool cmp(man x,man y){
    return x.cj>y.cj;
}

int main(){
    int n,m;
    cin>>n>>m;
    for(int i=1;i<=n;i++){ 
    cin>>a[i].num>>a[i].cj;
    }
    sort(a+1,a+n+1,cmp);
    cout<<a[m].num<<" ";
    printf("%.1f",a[m].cj);
    return 0;
}

 

我要回答