数学老师小y 想写一个成绩查询系统,包含如下指令:
insert [name] [score]
,向系统中插入一条信息,表示名字为name
的学生的数学成绩为score
。find [name]
,表示查找名字为name
的学生的数学成绩。
注意有些同学可能会为了刷分多次选课,查询的时候给出最大成绩即可。学生的名字是由小写字母组成。成绩是一个 0…1000 \ldots 1000…100 的整数。
老师找到你,想你帮他完成这个系统。
输入格式
输入若干行,每行都是insert [name] [score]
或者find [name]
的形式,或一行end
表示输入结束。输入行数不大于100010001000,每个学生名字长度不大于202020 个字符。
输出格式
对于每个查询,输出查询的学生的最高成绩,如果系统中不存在该学生,输出 −1-1−1。
样例输入
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;
}