题解 | #[NOIP2007]奖学金#

[NOIP2007]奖学金

https://ac.nowcoder.com/acm/problem/16639

链接:https://ac.nowcoder.com/acm/problem/16639 来源:牛客网 C++解法 某小学最近得到了一笔赞助,打算拿出其中一部分为学习成绩优秀的前5名学生发奖学金。期末,每个学生都有3门课的成绩:语文、数学、英语。先按总分从高到低排序,如果两个同学总分相同,再按语文成绩从高到低排序,如果两个同学总分和语文成绩都相同,那么规定学号小的同学 排在前面,这样,每个学生的排序是唯一确定的。 任务:先根据输入的3门课的成绩计算总分,然后按上述规则排序,最后按排名顺序输出前五名名学生的学号和总分。注意,在前5名同学中,每个人的奖学金都不相同,因此,你必须严格按上述规则排序。例如,在某个正确答案中,如果前两行的输出数据(每行输出两个数:学号、总分) 是: 7 279 5 279 这两行数据的含义是:总分最高的两个同学的学号依次是7号、5号。这两名同学的总分都是 279 (总分等于输入的语文、数学、英语三科成绩之和) ,但学号为7的学生语文成绩更高一些。如果你的前两名的输出数据是: 5 279 7 279 则按输出错误处理,不能得分。 输入描述: 第1行为一个正整数n,表示该校参加评选的学生人数。 第2到n+1行,每行有3个用空格隔开的数字,每个数字都在O到100之间z第1行的3个数 字依次表示学号为j-1的学生的语文、数学、英语的成绩。每个学生的学号按照输入顺序编号为l~n (恰好是输入数据的行号减1)。 所给的数据都是正确的,不必检验。 输出描述: 共有5行,每行是两个用空格隔开的正整数,依次表示前5名学生的学号和总分。 示例1 输入 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 示例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 输出 8 265 2 264 6 264 1 258 5 258 备注: 50%的数据满足: 各学生的总成绩各不相同 100%的数据满足: 6 ≤ n ≤ 300

分析题目,我们得知需要输入的变量有:学生个数、语文成绩、数学成绩、英语成绩 输出变量:学号、总成绩 本题需要对数组进行排序,我们可以通过先判断数的大小后利用swap函数进行交换 注意要把所有的量全部进行交换,缺失了会出现数的交换紊乱的情况,别忘了在判断完总分大小后进行语文的分数排序交换,否则会错误50% 代码如下:

  • #include<bits/stdc++.h>

  • using namespace std;

  • int main()

  • {

  • int n,c[302],m[302],e[302],a[302]={},xh[302];//c语文,m数学,e英语,a总分,xh学号
    
  • cin>>n;
    
  • for(int i=0;i<n;i++)
    
  • {
    
  •     cin>>c[i]>>m[i]>>e[i];
    
    1.     a[i]=c[i]+m[i]+e[i];
      
    1.     xh[i]=i+1;//输入成绩并标上学号
      
    1. }
      
    1. for(int i=n;i>1;i--)
      
    1. {
      
    1.     for(int j=0;j<i-1;j++)//冒泡
      
    1.     {
      
    1.       if(a[j]<a[j+1])
      
    1.       {
      
    1.           swap(a[j],a[j+1]);
      
    1.           swap(c[j],c[j+1]);
      
    1.           swap(m[j],m[j+1]);
      
    1.           swap(e[j],e[j+1]);
      
    1.           swap(xh[j],xh[j+1]);//交换所有数据
      
    1.       }
      
    1.       else if(a[j]==a[j+1])//判断语文成绩
      
    1.       {
      
    1.           if(c[j]<c[j+1])
      
    1.           {
      
    1.               swap(a[j],a[j+1]);
      
    1.               swap(c[j],c[j+1]);
      
    1.               swap(m[j],m[j+1]);
      
    1.               swap(e[j],e[j+1]);
      
    1.               swap(xh[j],xh[j+1]);
      
    1.           }
      
    1.       }
      
    1.     }
      
    1. }
      
    1. for(int i=0;i<5;i++)
      
    1.     cout<<xh[i]<<" "<<a[i]<<endl;   //注:输出前五名,故i=0;i<5,不要多输  
      
    1. }

全部评论

相关推荐

牛客52811839...:实习要写出来业务和产出,你这写的像流水账没人看。项目经历也没有,换个极简简历试试
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
正在热议
更多
# 春招至今,你的战绩如何? #
8880次浏览 81人参与
# 你的实习产出是真实的还是包装的? #
1654次浏览 40人参与
# MiniMax求职进展汇总 #
23693次浏览 305人参与
# 军工所铁饭碗 vs 互联网高薪资,你会选谁 #
7358次浏览 40人参与
# 重来一次,我还会选择这个专业吗 #
433282次浏览 3926人参与
# 简历第一个项目做什么 #
31486次浏览 326人参与
# 巨人网络春招 #
11289次浏览 223人参与
# 当下环境,你会继续卷互联网,还是看其他行业机会 #
186851次浏览 1118人参与
# 不考虑薪资和职业,你最想做什么工作呢? #
152256次浏览 887人参与
# 研究所笔面经互助 #
118841次浏览 577人参与
# 简历中的项目经历要怎么写? #
309928次浏览 4186人参与
# 面试紧张时你会有什么表现? #
30468次浏览 188人参与
# 你今年的平均薪资是多少? #
212968次浏览 1039人参与
# AI时代,哪些岗位最容易被淘汰 #
63273次浏览 795人参与
# 我的求职精神状态 #
447952次浏览 3128人参与
# 你最满意的offer薪资是哪家公司? #
76404次浏览 374人参与
# 高学历就一定能找到好工作吗? #
64288次浏览 620人参与
# 牛客AI文生图 #
21398次浏览 238人参与
# 你怎么看待AI面试 #
179765次浏览 1227人参与
# 正在春招的你,也参与了去年秋招吗? #
363143次浏览 2635人参与
# 腾讯音乐求职进展汇总 #
160549次浏览 1109人参与
# 职能管理面试记录 #
10794次浏览 59人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务