【题解】老虎的月测分析

题目描述

今年是虎年,小老虎一年来过得可充实了,一有时间就往电脑室跑,因为他要在“在线测试”系统上拿第一名,成为做题最多的牛人。可小老虎也有烦恼的时候。一天放学,小老虎正走出课室想去电脑室,班主任过来了,因刚中段考完,小老虎知道自己的总分不是全级第一也有第二的那种,就大摇大摆的迎了上去。这时,班主任截住了小老虎,说:“小老虎,作业呢》”咦......半天,小老虎才说:“昨天去奥电班了......”,这时班主任瞪了一眼说:“有时间去奥电班就没有时间做我的作业?去“打机”了吧?!”小老虎无语,不过还是对老师说:“老师,我对天发誓天天在编程,从不玩游戏,越来越聪明了,你看,我这次月测又......”,心里却在想:“切......你的作业这么没有挑战性,有时间我也不做的啦!”这时班主任看出了小老虎的心思,知道作业是追不回来的啦,便想杀杀小老虎的威风。“哦,是啊,你越来越聪明了啊,听说你在奥电班也是拿第一第二的那种,中段考完了,帮老师个忙啊,那数据分析之类的事就你搞掂啦,还有啊,就体艺节了,你想几个游戏给大家活动活动,搞不好啊,以后都别去电脑室编程了,每天老老实实把作业做完”。

小老虎...

输入输出格式

输入格式:

第一行是一个正整数n;

接下来是n行,每行为一个同学的成绩,格式如下:

先是一个字符串,表示这个同学的名字(长度小于等于20,由大小写字母构成),然后是他的4位学号(数据保证是4位,但是可能以0开头),接下来是4个数,分别表示他的语文、数学、英语、综合成绩(这个数在0到150之间,一定是0.5的倍数),最后是一个字符串和一个数(这个数在0到150之间,一定是0.5的倍数),字符串表示他的X科(一定是physics、chemistry、biology中的一个),那个数为他这科的成绩。以上的数据都由一个空格隔开,末尾没有多余的空格。

具体请看样例。

输出格式:

共3行,分别表示选考physics、chemistry、biology中总分最高的同学。每行的输出格式为:

先是一个字符串,表示这个同学的名字,然后是他的4位学号,最后是他的总分。如果总分相同,则输出4位学号最小的。数据保证4位学号互不相同。以上的数据都由一个空格隔开,末尾没有多余的空格。具体请看样例。

输入输出样例

输入样例:
5
apple 0101 150 150 150 150 physics 150
egg 0202 140 130.5 130 150 chemistry 150
banana 0102 130 140 130.5 150 chemistry 150
cat 0103 100.5 100 100 100 biology 100
dog 0288 89.5 89.5 89.5 89.5 physics 91.5
输出样例:
apple 0101 750
banana 0102 700.5
cat 0103 500.5

说明

数据规模:

100%的数据满足:3<=n<=600

数据保证每科至少有一个同学的成绩。

所有的分数应以最简形式输出(例如不要将750输出为750.0)。

输入数据保证所有的分数都为最简形式。

这道题很简单的啦

首先看到这么多数据我们就先开一个结构体,因为要输出每科分数最高的,所以我们可以先把它们的科目排序,然后每科排出一个总分最高的就输出

具体程序如下:

#include<iostream>
#include<string>
#include<cstdio>
#include<cstdlib> 
#include<algorithm>
using namespace std;
struct node
{
    string name,id;
    double score;
    string subject;
    double subscore;
}stu[605];
bool subcmp(node x,node y)
{
    if(x.subject!=y.subject) return x.subject>y.subject;
}
bool sccmp(node x,node y)
{
    if(x.score!=y.score) return x.score>y.score;
    else if(x.id!=y.id) return x.id<y.id;
}
int n,phy,che,bio;
char xxx;
double temp;
int main()
{
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>stu[i].name>>stu[i].id;
        for(int j=1;j<=4;j++)
        {
            cin>>temp;
            stu[i].score+=temp;
        }
        cin>>stu[i].subject;
        if(stu[i].subject=="physics") phy++;
        if(stu[i].subject=="chemistry") che++;
        if(stu[i].subject=="biology") bio++;
        cin>>temp;
        stu[i].score+=temp;
        stu[i].subscore=temp;
    }
    sort(stu+1,stu+1+n,subcmp);
    sort(stu+1,stu+1+phy,sccmp);
    cout<<stu[1].name<<" "<<stu[1].id<<" "<<stu[1].score<<"
";
    sort(stu+1+phy,stu+1+phy+che,sccmp);
    cout<<stu[1+phy].name<<" "<<stu[1+phy].id<<" "<<stu[1+phy].score<<"
";
    sort(stu+1+phy+che,stu+1+bio+che+phy,sccmp);
    cout<<stu[1+phy+che].name<<" "<<stu[1+phy+che].id<<" "<<stu[1+phy+che].score;
    return 0;
}
原文地址:https://www.cnblogs.com/2021-yanghaoran/p/10498540.html