首页 > 其他分享 >奖学金 qsort函数多重排序

奖学金 qsort函数多重排序

时间:2022-11-30 10:04:45浏览次数:44  
标签:奖学金 学号 int zf qsort stu 总分 排序 yw


奖学金


时间限制(普通/Java):1000MS/3000MS          运行内存限制:65536KByte
总提交:70            测试通过:31

描述




p { margin-bottom: 0.21cm; }

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



任务:先根据输入的3门课的成绩计算总分,然后按上述规则排序,最后按排名顺序输出前五名名学生的学号和总分。注意,在前5名同学中,每个人的奖学金都不相同,因此,你必须严格按上述规则排序。例如,在某个正确答案中,如果前两行的输出数据(每行输出两个数:学号、总分) 是:



7 279




5 279



这两行数据的含义是:总分最高的两个同学的学号依次是7号、5号。这两名同学的总分都是 279 (总分等于输入的语文、数学、英语三科成绩之和) ,但学号为7的学生语文成绩更高一些。如果你的前两名的输出数据是:



5 279




7 279



则按输出错误处理,不能得分。





输入






p { margin-bottom: 0.21cm; }

输入包含n+1行:




第1行为一个正整数n,表示该校参加评选的学生人数。




第2到n+1行,每行有3个用空格隔开的数字,每个数字都在O到100之间z第1行的3个数 字依次表示学号为j-1的学生的语文、数学、英语的成绩。每个学生的学号按照输入顺序编号为l~n (恰好是输入数据的行号减1)。




所给的数据都是正确的,不必检验。





输出






p { margin-bottom: 0.21cm; }

输出共有5行,每行是两个用空格隔开的正整数,依次表示前5名学生的学号和总分。






样例输入



6     
90 67 80 
87 66 91   
78 89 91    
88 99 77    
67 89 64      
78 89 98 



样例输出



6 265
4 264
3 258
2 244
1 237



提示




50%的数据满足:各学生的总成绩各不相同 100%的数据满足: 6<=n<=300

 

#include<iostream>
#include<cstdio>
#include <stdlib.h>
using namespace std;
struct stu
{
double yw;
double sx;
double yy;
double zf;
int xh;
}a[400];
int cmp(const void *a,const void *b)
{
struct stu *c=(stu *)a;
struct stu *d=(stu *)b;
if(c->zf!=d->zf)return d->zf-c->zf;
else if(c->yw!=d->yw)return d->yw-c->yw;
else return c->xh-d->xh;
}
int main()
{
// stu a[300];
int n;
while(~scanf("%d",&n))
{
for(int i=0;i<n;i++)
{
cin>>a[i].yw>>a[i].sx>>a[i].yy;
a[i].zf=a[i].yw+a[i].sx+a[i].yy;
a[i].xh=i+1;
}
qsort(a,400,sizeof(a[0]),cmp);
for(int i=0;i<5;i++)
cout<<a[i].xh<<" "<<a[i].zf<<endl;
}
return 0;
}

 

标签:奖学金,学号,int,zf,qsort,stu,总分,排序,yw
From: https://blog.51cto.com/u_15896805/5897494

相关文章

  • 字符排序
    描述给定一个字符串str和两个字符a,b,将str中ASCII码处于a,b之间(含ab)的字符按ASCII码从大到小排序,其他字符位置不变.输出排序后的字符串。输入输入只有两行:第一行给......
  • 10种经典排序算法的JavaScript实现方法
    排序算法是《数据结构与算法》中最基本的算法之一。常见的一些排序算法有:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。其中,冒泡排序......
  • 二叉排序树
    二叉排序树BinarySortTree,简称BST,要求二叉排序树的任意一个非叶子节点的左节点的值<=该节点值<=右节点值1.0二叉排序树的创建和遍历思路分析节点类属性:value,......
  • 集合习题分数排序
    创建一个学生类,属性包括id[1-40],分数0-100,所有属性随机生成,创建set集合,保存20个对象,找到分数最高和分数最低的学生privatestaticvoiddemo2(){//用treeset......
  • java list根据对象的某个属性排序
    javalist根据对象的某个属性排序 Collections.sort(list1,newComparator<BlogRank>(){@Overridepublicintcompare(BlogRankblogRankObj1,BlogRa......
  • 归并排序模板
    归并排序模板归并排序要点:分治的思想确定分界点mid=(l+r)/2;递归排序left,right归并——合二为一(归并排序的核心)#include<bits/stdc++.h>usingnamespac......
  • 拓扑排序 专题
    拓扑排序(\(Topological\)\(sorting\))拓扑排序指的是有向无环图(\(DAG\));学过计算机网络的知道计算机网络中有一个拓扑结构;下面就是一个拓扑结构;那拓扑序就是,图中任意一......
  • Sequelize排序问题: 关联其他表数据的排序实现
    问题描述:有一对多或者多对多的关联表数据要一起提取返回前端时,在没有申明排序规则的情况下,关联的数据的顺序是随机的。在前端多次调用这类接口,会发现,页面展示的关联数据的......
  • 排序实练(1):列表排序-插入法及排序基础认知
    1.1插入法排序:有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序,这个时候就要用到一种新的排序方法——​​插入排序法​......
  • 排序实练(2):列表排序-冒泡法/选择排序/快速排序
    ​​排序算法有很多,包括​​​​插入排序​​​,​​堆排序​​​,​​归并排序​​​,​​选择排序​​​,​​计数排序​​​,​​基数排序​​​,​​桶排序​​​,​​快速排序......