PAT中文版1004.成绩排名

来源:互联网 发布:河钢唐钢 云计算 编辑:程序博客网 时间:2024/05/18 02:22

读入n名学生的姓名、学号、成绩,分别输出成绩最高和成绩最低学生的姓名和学号。

输入格式:每个测试输入包含1个测试用例,格式为

  第1行:正整数n  第2行:第1个学生的姓名 学号 成绩  第3行:第2个学生的姓名 学号 成绩  ... ... ...  第n+1行:第n个学生的姓名 学号 成绩

其中姓名和学号均为不超过10个字符的字符串,成绩为0到100之间的一个整数,这里保证在一组测试用例中没有两个学生的成绩是相同的。

输出格式:对每个测试用例输出2行,第1行是成绩最高学生的姓名和学号,第2行是成绩最低学生的姓名和学号,字符串间有1空格。

输入样例:

3Joe Math990112 89Mike CS991301 100Mary EE990830 95

输出样例:

Mike CS991301Joe Math990112

ps:知道C++标准类库的童鞋可以笑了,全部读进来,sort就可以了,关键是定义的比较函数。但是感觉全排列一遍费时,因为边读边分析就能啊最高分和最低分过滤出来。

#include<stdio.h>#include<iostream>#include<string>
 
using namespace std;
 
struct Node{    string name,id;    int score;};
 
bool cmp(Node a,Node b){    return a.score>b.score?true:false;}
 
int main(){    int nCases;    scanf("%d",&nCases);    nCases--;    Node tempNode,max,min;    cin>>tempNode.name>>tempNode.id>>tempNode.score;    max=min=tempNode;     while( nCases-- )    {        cin>>tempNode.name>>tempNode.id>>tempNode.score;        if( cmp(tempNode,max) )            max=tempNode;        if( cmp(min,tempNode) )            min=tempNode;    }    cout<<max.name<<" "<<max.id<<endl;    cout<<min.name<<" "<<min.id<<endl;
    return 0;}

或者是

#include<stdio.h>#include<iostream>#include<vector>#include<string>#include<algorithm>
 
using namespace std;
 
struct Node{    string name,id;    int score;};
 
bool cmp(Node a,Node b){    return a.score<b.score?true:false;}
int main(){    int nCases;    scanf("%d",&nCases);    vector<Node> info;    while( nCases-- )    {        Node tempNode;        cin>>tempNode.name>>tempNode.id>>tempNode.score;        info.push_back (tempNode);    }    sort(info.begin (),info.end (),cmp);    cout<<info[info.size ()-1].name<<" "<<info[info.size ()-1].id<<endl;    cout<<info[0].name<<" "<<info[0].id<<endl;
 
    return 0;}