zoukankan      html  css  js  c++  java
  • NOIP200701奖学金

    试题描述

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

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

    7279

    5279

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

    5279

    7279

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

    输入
    包含n+1行: 
    第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       
    【输入样例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  


    输出示例
    【输出样例1】 
    6 265
    4 264
    3 258
    2 244
    1 237
    【输入样例1】 
    8 265
    2 264
    6 264
    1 258
    5 258
    其他说明
    【限制】50%的数据满足:各学生的总成绩各不相同 100%的数据满足: 6<=n<=300 
     

    炒鸡简单的一道题。下面贡献两份代码

    第一份:普通版

     1 #include <iostream>
     2 
     3 using namespace std;
     4 
     5 int main(int argc, char *argv[])
     6 {   
     7     int n,c[305]={0},m[305]={0},e[305]={0},i,j,s[305]={0},x[305]={0};
     8     cin>>n;
     9     for(i=1;i<=n;i++)
    10     {
    11         cin>>c[i];
    12         cin>>m[i];
    13         cin>>e[i];
    14         s[i]=c[i]+m[i]+e[i];
    15         x[i]=i;
    16         //cout<<c[i]<<" "<<m[i]<<" "<<e[i]<<" "<<s[i]<<endl;
    17     }
    18   for(i=1;i<n;i++)
    19     {
    20         for(j=i+1;j<=n;j++)
    21         {
    22             if(s[i]<s[j])
    23             {
    24                 swap(s[i],s[j]);
    25                 swap(c[i],c[j]);
    26                 swap(x[i],x[j]);
    27             }
    28            else if(s[i]==s[j])
    29             {
    30                 if(c[i]<c[j])
    31                 {
    32                     swap(s[i],s[j]);
    33                     swap(c[i],c[j]);
    34                     swap(x[i],x[j]);
    35                   
    36                 }
    37                 else if(c[i]==c[j])
    38                 {
    39                     if(x[i]>=x[j])
    40                     {
    41                         swap(s[i],s[j]);
    42                         swap(c[i],c[j]);
    43                         swap(x[i],x[j]);
    44                     }
    45                 }
    46             }
    47         }
    48         //cout<<x[i]<<" "<<s[i]<<endl;
    49     }
    50     for(i=1;i<=5;i++)
    51     {
    52         cout<<x[i]<<" "<<s[i]<<endl;
    53     }
    54     return 0;
    55 }
    NOIP200701奖学金

    第二份:运算符重载版。最近新学会的运算符重载,还挺方便的。

     1 #include <iostream>
     2 
     3 using namespace std;
     4 struct data  //运算符重载 
     5 {
     6     int num,ch,z,ma,eng;
     7     bool operator<(const data &a)const
     8     {
     9         if(z>a.z) return true;   //用原来的总分和当前比,如果大,不用交换 
    10         else if(z==a.z && ch>a.ch) return true;  //如果总分一样,比语文 
    11         else if(z==a.z && ch==a.ch && num<a.num) return true; //如果总分和语文都一样,比学号 
    12         else return false;
    13     }
    14 }a[400];
    15 int main()
    16 {
    17     int n,i,j;
    18     scanf("%d",&n);
    19     for(i=1;i<=n;i++)
    20     {
    21         a[i].num=i;
    22         scanf("%d%d%d",&a[i].ch,&a[i].ma,&a[i].eng);
    23         a[i].z=a[i].ch+a[i].ma+a[i].eng;
    24     }
    25     sort(a+1,a+n+1);
    26     for(i=1;i<=5;i++)
    27     {
    28         printf("%d %d
    ",a[i].num,a[i].z);  //'
    '是回车 
    29     }
    30     return 0;
    31 }
    NOIP200701奖学金(2)
  • 相关阅读:
    还原网站上被压缩的JS代码方便阅读
    让chrome浏览器变成在线编辑器
    awk之NF的妙用
    Xargs用法详解
    CU论坛常用知识点汇总
    awk中RS,ORS,FS,OFS区别与联系
    SHELL十三问[转载自CU论坛]
    关于shell中常见功能的实现方式总结
    shell实现ftp命令示例
    MySQL基础
  • 原文地址:https://www.cnblogs.com/YXY-1211/p/5150209.html
Copyright © 2011-2022 走看看