2017年蓝桥杯模拟赛-8成绩查询



数学老师小y 想写一个成绩查询系统,包含如下指令:

  1. insert [name] [score],向系统中插入一条信息,表示名字为name的学生的数学成绩为score
  2. find [name],表示查找名字为name的学生的数学成绩。

注意有些同学可能会为了刷分多次选课,查询的时候给出最大成绩即可。学生的名字是由小写字母组成。成绩是一个 0…1000 \ldots 1000100 的整数。

老师找到你,想你帮他完成这个系统。

输入格式

输入若干行,每行都是insert [name] [score]或者find [name]的形式,或一行end表示输入结束。输入行数不大于100010001000,每个学生名字长度不大于202020 个字符。

输出格式

对于每个查询,输出查询的学生的最高成绩,如果系统中不存在该学生,输出 −1-11

样例输入
insert zhangsan 90
insert lisi 78
insert xiaoming 86
find xiaoming
find jack
end
样例输出
86
-1
 
  
#include <iostream>
#include <string>
using namespace std;

struct Student
{
    string name;
    int score;
};

int main()
{
    int i=0;
    Student stu[100];
    string opr;
    string nam;
    int sco;
    while(cin>>opr)
    {
        if(opr=="end")
        {

            break;
        }



        else if(opr=="insert")
        {

            cin>>nam>>sco;
            stu[i].name=nam;
            stu[i].score=sco;
            i++;
        }
        else if(opr=="find")
        {

            cin>>nam;
            int j;
            bool f=false;
            for(j=0; j<=10; j++)
            {

                if(stu[j].name==nam)/*在这犯了低级错误!!!!!!!!!!!!!!!!!!!!!*/
                {
                    f=true;
                    cout<<stu[j].score<<endl;
                }
            }
            if(f==false)
            {
                cout<<"-1"<<endl;
            }

        }
        //else
        //    cout<<"error"<<endl;




    }
    return 0;
}

模拟赛之后的修改:
#include <iostream>
#include <string>
using namespace std;

struct Student
{
    string name;
    int score;
};

int main()
{
    int i=0;
    Student stu[100];
    string opr;
    string nam;
    int sco;
    while(cin>>opr)
    {
        if(opr=="end")
        {

            break;
        }



        else if(opr=="insert")
        {

            cin>>nam>>sco;
            stu[i].name=nam;
            stu[i].score=sco;
            i++;
        }
        else if(opr=="find")
        {

            cin>>nam;
            int j;
            bool f=false;
            for(j=0; j<=i; j++)
            {

                if(stu[j].name==nam)/*在这犯了低级错误!!!!!!!!!!!!!!!!!!!!!*/
                {
                    f=true;
                    cout<<stu[j].score<<endl;
                }
            }
            if(f==false)
            {
                cout<<"-1"<<endl;
            }

        }
        //else
        //    cout<<"error"<<endl;




    }
    return 0;
}

思路:map
/*
insert zhangsan 90
insert zhangsan 96
insert lisi 78
insert xiaoming 86
find xiaoming
find zhangsan
find jack
end
*/
#include<iostream>
#include<string>
#include<algorithm>
#include<map>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
int main() {
    string s;
    map<string,int> a;
    while(cin>>s) {
        if(s[0]=='e') break;
        else if(s[0]=='i') {
            string name;
            int score;
            cin>>name>>score;
            map<string,int>::iterator temp;
            temp=a.find(name);
            if(temp==a.end()) a.insert(make_pair(name,score));
            else a[name]=max(a[name],score);
        } else if(s[0]=='f') {
            string name;
            cin>>name;
            map<string,int>::iterator temp;
            temp=a.find(name);
            if(temp==a.end()) {
                cout<<"-1"<<endl;
            } else {
                cout<<temp->second<<endl;
            }
        }
    }
    return 0;
}



 
 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值