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


    题目描述

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

    输入

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

    输出

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

    样例输入
    4 4
    1 Taidi 100 100 90 90
    2 Dahaoge 60 60 70 60
    3 Yeshen 90 90 100 100
    4 Wangpangzi 50 60 100 80
    样例输出
    1 Taidi 100 100 90 90 Sum = 380 Ranking = 1
    3 Yeshen 90 90 100 100 Sum = 380 Ranking = 1
    4 Wangpangzi 50 60 100 80 Sum = 290 Ranking = 3
    2 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 100000000000000000
    18 #define MOD 1000000007
    19 #define pi acos(-1.0)
    20 #define ei exp(1)
    21 #define PI 3.141592653589793238462
    22 #define INF 0x3f3f3f3f3f
    23 #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 node
    31 {
    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 }
  • 相关阅读:
    Java学习(运算符,引用数据类型)
    Java学习(基本语句,语法,变量)
    Java学习(简介,软件安装)
    MySQL连接查询(多表查询)
    MySQL数据约束
    VS code MacOS 环境搭建
    三维空间中xoy平面上特定抛物线的正等测投影解析解的一种求法
    抛物线正等测投影的解析解求法
    抛物线正等测投影数值解的求法
    反向工程“你的使用说明书”小记
  • 原文地址:https://www.cnblogs.com/wydxry/p/7274048.html
Copyright © 2020-2023  润新知