c++题目求大佬

快速排序题目描述:输入若干行个人的语文和英语成绩,所有成绩均大于0。现在要求对每个人的成绩排序后输出,要求以语文成绩为第一关键字,英语成绩为第二关键字,两个关键字都为“升... 快速排序
题目描述:
输入若干行个人的语文和英语成绩,所有成绩均大于0。

现在要求对每个人的成绩排序后输出,要求以语文成绩为第一关键字,英语成绩为第二关键字,两个关键字都为“升序”进行排序(语文成绩低的排在前面,语文成绩相同若英语成绩低的排在前面)。

输入格式:
第一行,一个整数N
接下来N行,每行两个整数,用一个空格隔开。

输出格式:
输出排序后的结果,一行两个数。

样例输入:
3
71 30
90 50
71 23
样例输出:
71 23
71 30
90 50
提示:
n<=200,000

使用scanf输入两个数

scanf("%d%d",&x,&y); //注意&一定要加

使用printf输出两个数

printf("%d %d\n", x, y); //这样输出的话,先输出x,再输出一个空格,然后再输出y,最后输出换行。

时间限制:1000ms
空间限制:128MByte
展开
 我来答
百度网友87b6097
2019-04-20 · TA获得超过127个赞
知道答主
回答量:84
采纳率:66%
帮助的人:9.6万
展开全部

这一题类似于2007年普及组的一题:奖学金。

是这样的:

某小学最近得到了一笔赞助,打算拿出其中一部分为学习成绩优秀的前5名学生发奖学金。期末,每个学生都有3门课的成绩:语文、数学、英语。先按总分从高到低排序,如果两个同学总分相同,再按语文成绩从高到低排序,如果两个同学总分和语文成绩都相同,那么规定学号小的同学排在前面,这样,每个学生的排序是唯一确定的。
任务:先根据输入的3门课的成绩计算总分,然后按上述规则排序,最后按排名顺序输出前5名学生的学号和总分。

这种类型的题目可以使用结构体来方便我们的排序。

因为我们都是学编程的,所以我们都需要思考(我的老师说的)不能直接抄代码,所以我不会直接上代码。所以我就先送上一份“奖学金”的代码来给一点启发。(当然如果一定需求这道题的AC代码的话也可以私聊我。(不推荐))

#include <bits/stdc++.h>
using namespace std;
struct stu
{
    int num,c,m,e,sum;
};
bool cmp(stu a,stu b)
{
    if(a.sum>b.sum) return 1;
    else if(a.sum<b.sum) return 0;
    else
    {
        if(a.c>b.c) return 1;
        else if(a.c<b.c) return 0;
        else
        {
            if(a.num>b.num) return 0;
            else return 1;
        }
    }
}
int main()
{
    int n;
    cin>>n;
    stu student[n+1];
    for(int i=1;i<=n;i++)
    {
        student[i].num=i;
        cin>>student[i].c>>student[i].m>>student[i].e;
        student[i].sum=student[i].c+student[i].m+student[i].e;
    }
    sort(student+1,student+1+n,cmp);
    for(int i=1;i<=5;i++)
        cout<<student[i].num<<' '<<student[i].sum<<endl;
    return 0;
}

这道题跟你的题真的特别相似,所以可以举一反三,建议自己想想看。(当然如果一定需求这道题的AC代码的话也可以私聊我。(不推荐))

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式