题是这样的:

试题描述

某小学最近得到了一笔赞助,打算拿出其中一部分为学习成绩优秀的前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

这题。。。好吧,这个题还是可以的。(水)。。。

这道题可以运用一下自定义类

(stuct)

例如:

struct student
{
    int yuwen, english, math ,id;//我相信你能读懂!
    //yuwen:语文
    //english:英语
    //math:数学
    //id:学号
    int sum;
    //sum:总分
}a[maxn];

但是,问题来了,怎么排序?

看来还是得重载运算符(本人曾经在其他博客中写过这个运算符重载的模板)

bool operator < (const student &a) const
{
    if(sum == a.sum)//先比较总分
    {
         //如果总分相同,比较语文
    if(yuwen != a.yuwen) return yuwen < a.yuwen;
    //如果语文也相同,就比较学号
    return id > a.id;
    }
    return sum < a.sum;
}

这样的话,就可以用sort排序了,运算速度大幅提升

    sort(a,a+n);//直接排序

总结一下这个student类

struct student
{
    int yuwen, english, math ,id;//我相信你能读懂!
    //yuwen:语文
    //english:英语
    //math:数学
    //id:学号
    int sum;
    //sum:总分
    bool operator < (const student &a) const
    {
        if(sum == a.sum)//先比较总分
        {
            //如果总分相同,比较语文
            if(yuwen != a.yuwen) return yuwen < a.yuwen;
            //如果语文也相同,就比较学号
            return id > a.id;
        }
        return sum < a.sum;
    }
}a[maxn];

这就可以了!

源代码,已经AC

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstdlib>
#include<cmath>
#include<cstring>
using namespace std;
;
int n;
struct student
{
    int yuwen, english, math ,id;//我相信你能读懂!
    //yuwen:语文
    //english:英语
    //math:数学
    //id:学号
    int sum;
    //sum:总分
    bool operator < (const student &a) const
    {
        if(sum == a.sum)//先比较总分
        {
            //如果总分相同,比较语文
            if(yuwen != a.yuwen) return yuwen < a.yuwen;
            //如果语文也相同,就比较学号
            return id > a.id;
        }
        return sum < a.sum;
    }
}a[maxn];
int main()
{
    scanf("%d",&n);
    ;i<n;i++) scanf(;//输入
    sort(a,a+n);//直接排序
    ;i>n-;i--) printf("%d %d\n", a[i].id, a[i].sum);//输出
}

谢谢大家,欢迎大家继续关注我。

NOIP200701的更多相关文章

  1. NOIP201101&&05

    NOIP200701奖学金 难度级别:A:            运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述    某小学最近得到了一笔赞助 ...

随机推荐

  1. js-弹出一个新窗口 新窗口自动转接到一个页面然后自动关闭

    这个问题.好. 在百度问问找到的:他的做法是打开一个后通过实例对象,再进行一将跳转,最后再将JS里定时将实例对象关闭... 这个问题其实不需要两个页面,只要三行JS代码就能实现,除非你在2.php里面 ...

  2. AT指令

    AT+CMGF=0  初始化 AT+IPR=115200 AT+CPAS   查询工作状态,0:可以接受AT指令,1:不能接受AT指令 ATA  应答本次电话 ATSO=2 设置2秒后自动应答 ATS ...

  3. 【转载】总结一下Android中主题(Theme)的正确玩法

    http://www.cnblogs.com/zhouyou96/p/5323138.html 总结一下Android中主题(Theme)的正确玩法 在AndroidManifest.xml文件中有& ...

  4. 注入限制绕过<转>

    突然想我们是否可以用什么方法绕过SQL注入的限制呢?到网上考察了一下,提到的方法大多都是针对AND与“'”号和“=”号过滤的突破,虽然有点进步的地方,但还是有一些关键字没有绕过,由于我不常入侵网站所以 ...

  5. 从零开始学android开发-项目debug

    在红框处能看到变量值

  6. Android adt v22.6.2-1085508 自己主动创建 appcompat_v7 解决方法,最低版本号2.2也不会出现

    Android 开发工具升级到22.6.2在创建project时仅仅要选择的最低版本号低于4.0,就会自己主动生成一个项目appcompat_v7,没创建一个新的项目都会自己主动创建,非常是烦恼... ...

  7. com.ulitis.www

    package com.ulitis.www; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io ...

  8. Android中的事件分发机制总结

    Android 的事件分发机制 一.View的事件分发总结: View的onTouchEvent和OnTouch区别  还是以自定义的TestButton为例. 我们可以通过重写onTouchEven ...

  9. php笔记03:布尔类型,字符串,浮点数

    1.布尔类型 下面情况都是看出false: 布尔类型FALSE自身 整型值为0 浮点型值为0.0 空字符串,以及字符串"0" 不包含任何元素的数组 不包含任何成员变量的对象(仅PH ...

  10. Linux系统故障处理案例(一)

    运行环境:CentOS6.7 故障原因: 昨天在线执行命令yum -y update 在命令执行途中,强制中断并直接运行poweroff命令关机.再次开机出现如图所示故障指示: 根据提示信息分析,可能 ...