zoukankan      html  css  js  c++  java
  • 洛谷 P1093 奖学金

    链接:https://www.luogu.org/problem/P1093

    题目:

      题目描述

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

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

      7 279
      5 279

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

      5 279
      7 279

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

      输入格式

      共n+1行。

      第11行为一个正整数n( le 300)n(300),表示该校参加评选的学生人数。

      第22到n+1n+1行,每行有33个用空格隔开的数字,每个数字都在00到100100之间。第jj行的33个数字依次表示学号为j-1j1的学生的语文、数学、英语的成绩。每个学生的学号按照输入顺序编号为1~n1 n(恰好是输入数据的行号减11)。

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

      //感谢 黄小U饮品 修正输入格式

      输出格式

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

      输入输出样例

      输入 #1
      6
      90 67 80
      87 66 91
      78 89 91
      88 99 77
      67 89 64
      78 89 98
    
      输出 #1
      6 265
      4 264
      3 258
      2 244
      1 237
    
    
      输入 #2
      8
      80 89 89
      88 98 78
      90 67 80
      87 66 91
      78 89 91
      88 99 77
      67 89 64
      78 89 98
      输出 #2
      8 265
      2 264
      6 264
      1 258
      5 258

    思路:

      挺不错的一道题,考虑排序优先级即可。我这里用了结构体来存放学号和成绩,借助sort和cmp设置排序,优先总分,其次语文,最后学号,最后输出前五个即可。

      (这里有个坑,排序函数中要注意,学号是小的在前面,分数是大的在前面,我就因为这个错了一次)

    代码:

     1 #include<iostream>
     2 #include<algorithm>
     3 using namespace std;
     4 
     5 struct stu
     6 {
     7     int num;
     8     int c;
     9     int m;
    10     int e;
    11     int score;
    12 }s[301];
    13 
    14 bool cmp(stu a,stu b)
    15 {
    16     if(a.score!=b.score)
    17     {
    18         return a.score>b.score;
    19     }
    20     else if(a.c!=b.c)
    21     {
    22         return a.c>b.c;
    23     }
    24     else
    25     {
    26         return a.num<b.num;
    27     }
    28 }
    29 
    30 int main()
    31 {
    32     int n;
    33     cin>>n;
    34     for(int i=0;i<n;i++)
    35     {
    36         s[i].num=i+1;
    37         cin>>s[i].c>>s[i].m>>s[i].e;
    38         s[i].score=s[i].c+s[i].m+s[i].e;
    39     }
    40     sort(s,s+n,cmp);    
    41     for(int i=0;i<5;i++)
    42     {
    43         cout<<s[i].num<<" "<<s[i].score<<" "<<endl;
    44     }
    45     return 0;
    46 }
  • 相关阅读:
    配置域名服务器报错named[822]: dns_rdata_fromtext /etc/bind/db.asertest.com mail not a valid number
    Cookie/Session机制详解
    java中一个数组不能放不同数据类型的值
    javascript中 (function(){})();如何理解?
    图表实现基于SVG或Canvas
    千层饼图 年轮图
    element select下拉框绑定number类型
    Vue和JQuery相比,除了节省了开发成本,还有什么优点?
    前端领域的BEM到底是什么
    js数组操作find查找特定值结合es6特性
  • 原文地址:https://www.cnblogs.com/blogxjc/p/11242204.html
Copyright © 2011-2022 走看看