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 展开
题目描述:
输入若干行个人的语文和英语成绩,所有成绩均大于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 展开
1个回答
展开全部
这一题类似于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代码的话也可以私聊我。(不推荐))
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |