ACM基础之结构体排序

问题 E: 【排序】排名

时间限制: 1 Sec  内存限制: 64 MB

题目描述

班上刚测试了几门课,现在信息技术课的老师要分析一些功课之间的成绩关系,看看每个人的信息技术课成绩排名以及数学课成绩排名,并按信息技术课的成绩从高到低排列,如果两个人的信息技术课成绩相同,则学号小的排在前面。老师把任务交给了信息学最好的你,请你编程完成这个任务。

输入

第1行一个整数N,表示共有N个同学的成绩(1≤N≤45);后面有N行,每行4个整数,分别表示一个同学的:语文、数学、英语、信息技术成绩(成绩C:0≤C≤120)。

输出

共N行,每行6个数据,分别对应一个同学的语文、数学、英语、信息技术成绩和信息技术及数学成绩的排名。

样例输入

复制样例数据

3
90 95 89 110
95 120 78 115
96 97 103 92

样例输出

95 120 78 115 1 1
90 95 89 110 2 3
96 97 103 92 3 2

先上代码(C++):

#include <iostream>
#include <bits/stdc++.h>
using namespace std;
struct stu
{
int ch,ma,en,co;//语文 数学 外语 信息成绩。
int mr;//数学排名。
int id;//学号。
};
int cmp(stu a,stu b)
{
if(a.ma==b.ma)
{
return a.id<b.id;
}
else
{
return a.ma>b.ma;
}
}
int cmp1(stu a,stu b)
{
if(a.co==b.co)
{
return a.id<b.id;
}
else
{
return a.co>b.co;
}
}
int main()
{
int n;
cin>>n;
stu s[n+5];
for(int i=0;i<n;i++)
{
cin>>s[i].ch>>s[i].ma>>s[i].en>>s[i].co;
s[i].id=i+1;
}
sort(s,s+n,cmp);
for(int i=0;i<n;i++)
{
s[i].mr=i+1;
}
sort(s,s+n,cmp1);
for(int i=0;i<n;i++)
{
printf("%d %d %d %d %d %d\n",s[i].ch,s[i].ma,s[i].en,s[i].co,i+1,s[i].mr);
}
return 0;
}

思路:

此问题明显考察的结构体排序,首先重写排序算法sort,cmp,对结构体里的“数学”元素ma进行排序,然后对结构体中的数学排名mr进行赋值。然后再次重写排序cmp1.为了省事,不对信息co进行赋予排名,直接输出i+1,

注意:

重写结构体时候不能漏掉“若成绩相同时候按照学号排序”此点,故重写时候进行简单的if判定。

PS:菜鸟一个,大一放弃过ACM,现在在俱乐部与新生一起划水。



原文地址:https://www.cnblogs.com/shdwin/p/10200633.html

时间: 2024-08-07 04:17:32

ACM基础之结构体排序的相关文章

HDU 1084 [What Is Your Grade?] 结构体排序

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1084 题目大意:共5道题,N个学生.做出5道满分,0道50分.做出1-4道的同学,若在前50%(向下取整),则获得95.85.75.65,若在后50%则获得90.80.70.60. 关键思想:结构体排序 //结构体排序,考虑边界 #include <iostream> #include <algorithm> #include <cmath> #include <me

结构体排序

经常碰到结构体排序的问题,在此总结一下.以一个简单的例题开始: 例1.有三个人(Person结构体),每个人都有name(string型)和age(int型)两个属性,现在需要按照下面的规则排序:先以姓名按从小到大排序(如abc<abd),如果姓名相同,则按照年龄从大到小排序. #include<iostream> #include<string> using namespace std; struct Person{ string name; int age; }; voi

HDOJ 1009. Fat Mouse&#39; Trade 贪心 结构体排序

FatMouse' Trade Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 56784    Accepted Submission(s): 19009 Problem Description FatMouse prepared M pounds of cat food, ready to trade with the cats g

hdu 5702 Solving Order(结构体排序 水题)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5702 Solving Order Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 184    Accepted Submission(s): 135 Problem Description Welcome to HDU to take p

go语言的排序、结构体排序

原文:https://studygolang.com/articles/1598 晚上准备动手写点 go 的程序的时候,想起 go 如何排序的问题.排序 sort 是个基本的操作,当然搜索 search 也是.c 提供一个 qsort 和 bsearch,一个快排一个二分查找,不过是使用起来都不方便: c++ 中的 sort 貌似很不错,因为 c++ 支持泛型(或是说模板),所以很多东西使用起来很方便.go 是通过 sort 包提供排序和搜索,因为 go 暂时不支持泛型(将来也不好说支不支持),

【转】 从最简单的vector中sort用法到自定义比较函数comp后对结构体排序的sort算法

sort函数在使用中非常好用,也非常简单,而且效率与冒泡或者选择排序不是一个数量级.本文就sort函数在vector中的用法分为sort函数入门用法与自定义comp比较函数比较结构体这两个最基本的功能讲讲其用法: 1.sort入门: 使用sort需要包含algorithm头文件,完整代码如下 #include<iostream> #include<vector> #include<algorithm>//貌似可以不用,但最好加上. using namespace std

C++结构体排序

在C++中,对结构体的排序方式比C语言丰富的多.在C语言中,我们主要是通过qsort进行排序操作(抛开手写排序算法不说). 在C++<algorithm>中,有一个十分强大的排序函数sort,他的内部综合了许多种排序算法,因此非常高效.并且,用它来对结构体排序也十分方便. 先贴一段示例代码: 1 #include <cstdio> 2 #include <queue> 3 #include <vector> 4 #include <algorithm&

最小生成树模板+并查集(隐藏)+结构体排序模板

minn[101],g[101][101],u[101]; memset(u,1,sizeof(u)); memset(minn,0x7f,sizeof(minn)); minn[1]=0; u[1]=0; i,j,k,m; total=0; for(i=1;i<=n;i++) { k=0; for(j=1;j<=n;j++) if(u[j]&&(minn[k]>minn[j])) k=j; u[k]=0; for(j=1;j<=n;j++) if(u[j]&

HDU 1862 EXCEL排序(结构体排序)

EXCEL排序 Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 16387    Accepted Submission(s): 6137 Problem Description Excel可以对一组纪录按任意指定列排序.现请你编写程序实现类似功能. Input 测试输入包含若干测试用例.每个测试用例的第1行包含两个整数 N (<=1