首页 > 代码库 > JustOj 2039: 成绩排名 (结构体排序)

JustOj 2039: 成绩排名 (结构体排序)

题目描述

每次期末考试成绩出来之前的一段时间大豪哥心里都是痛苦的,总感觉自己会在班上排名特别差。所以当成绩出来以后大豪哥想快点知道班上的总排名,以便知道自己的排名。(PS:大豪哥班上有个学霸名叫日天,又名泰迪,不要问我为什么,因为泰迪的行为决定的)

 

输入

多组测试数据,至文件结尾。
先输入每个班上有n个同学,这个学期有m门课程(1<=n,m<=100)
接下来有n行,每行的输入格式为学号id,姓名name,课程成绩k1,课程成绩k2... ,课程成绩km.(学号在int型范围以内,0<=ki<=100,姓名长度在20个字符以下)

输出

输出班上每个同学排名,并输出总分及排名(如果总分相同就按学号从小到大输出,但是排名还是相同的)输出格式见样例

样例输入
4 41 Taidi 100 100 90 902 Dahaoge 60 60 70 603 Yeshen 90 90 100 1004 Wangpangzi 50 60 100 80
样例输出
1 Taidi 100 100 90 90 Sum = 380 Ranking = 13 Yeshen 90 90 100 100 Sum = 380 Ranking = 14 Wangpangzi 50 60 100 80 Sum = 290 Ranking = 32 Dahaoge 60 60 70 60 Sum = 250 Ranking = 4

题解:结构体排序
 1 #include <iostream> 2 #include <algorithm> 3 #include <cstring> 4 #include <cstdio> 5 #include <vector> 6 #include <cstdlib> 7 #include <iomanip> 8 #include <cmath> 9 #include <ctime>10 #include <map>11 #include <set>12 #include <queue>13 using namespace std;14 #define lowbit(x) (x&(-x))15 #define max(x,y) (x>y?x:y)16 #define min(x,y) (x<y?x:y)17 #define MAX 10000000000000000018 #define MOD 100000000719 #define pi acos(-1.0)20 #define ei exp(1)21 #define PI 3.14159265358979323846222 #define INF 0x3f3f3f3f3f23 #define mem(a) (memset(a,0,sizeof(a)))24 typedef long long ll;25 ll gcd(ll a,ll b){26     return b?gcd(b,a%b):a;27 }28 const int N=110;29 const int mod=1e9+7;30 struct node31 {32     int id;33     string name;34     int grade[N];35     int sum;36 }stu[N];37 bool cmp(node a,node b)38 {39     if(a.sum==b.sum)40         return a.id<b.id;41     return a.sum>b.sum;42 }43 int main()44 {45     int n,m,num;46     cin.sync_with_stdio(false);47     while(cin>>n>>m){48         for(int i=0;i<n;i++){49             cin>>stu[i].id>>stu[i].name;50             stu[i].sum=0;51             for(int j=0;j<m;j++){52                 cin>>stu[i].grade[j];53                 stu[i].sum+=stu[i].grade[j];54             }55         }56         sort(stu,stu+n,cmp);57         for(int i=0;i<n;i++){58             cout<<stu[i].id<<" "<<stu[i].name;59             for(int j=0;j<m;j++){60                 cout<<" "<<stu[i].grade[j];61             }62             if(i==0) num=1;63             else if(stu[i].sum!=stu[i-1].sum)64                 num=i+1;65             cout<<" Sum = "<<stu[i].sum<<" Ranking = "<<num<<endl;66         }67     }68     return 0;69 }

JustOj 2039: 成绩排名 (结构体排序)