A 题目描述
给出一句英文句子(只由大小写字母和空格组成,不含标点符号,也不会出现连续的空格),请将其中的所有单词顺序翻转
输入格式
多组数据,以EOF结束。
每行一句英文句子(确保只由大小写字母和空格组成,不含标点符号,也不会出现连续的空格,字符串总长度1000以内)
输出格式
每组数据输出一行,为反转后的字符串
输入样例
It is a apple
# include<cstdio>
# include<iostream>
# include<vector>
# include<cstring>
using namespace std;
int main(){
string str;
while(getline(cin,str)){
vector<string> vi;
while(str.find(" ")!=string::npos){
int pos=str.find(" ");
vi.push_back(str.substr(0,pos));
str=str.substr(pos+1);
}
vi.push_back(str);
cout<<vi[vi.size()-1];
for(int i=vi.size()-2;i>=0;i--){
cout<<" "<<vi[i];
}
cout<<endl;
}
return 0;
}
- 使用stack更方便,无需vector逆序输出。
- 需要注意的知识点
B题目描述
最近912星球的研究生入学了,912星球的教务处因此忙的焦头烂额,要求yzr做一个信息管理系统登陆查询研究生的考试成绩。
但是yzr太弱了,你能帮帮忙么?
912星球的每一位研究生都有一个名字id和一份星球考研成绩,可喜的是都是自然数。
信息管理系统需要完成两个命令:
1.“Insert空格id_number空格score_number”命令,表示登陆一个名字id为id_number,分数为score_number的同学的信息。
其中id和score都是自然数,分别代表一位研究生的id和成绩(中间有一个空格)。
2.“Find id_number”命令,表示查询一个名字id为id_number的研究生的成绩,需要输出对应的成绩
输入格式
首先输入一个整数T,表示一共有T组数据(0< T≤ 10)
每组数据的第一行包括一个数字n,表示这组数据一共n行,并且保证最多只有n位研究生,0< n≤ 100。
接下来每一行都有一条命令,形式如上所述。
不会有两名拥有同样名字id的同学,并且保证名字id是自然数且小于等于1000,得分为自然数且小于等于10000
输出格式
对于每一组数据中的每一条命令:
Insert命令无需任何对应输出
Find命令需要输出一行,形如“name:name_id空格score:score_number”,表示找到一个名字id为id_number,
分数为score_number的同学的信息。如果没有找到输出“No result!”。
输入:
2
2
Insert 0 10
Find 0
5
Insert 1 1
Find 2
Insert 2 2
Find 2
Find 1
AC代码:
# include<cstdio>
# include<iostream>
# include<cstring>
# include<map>
using namespace std;
int main(){
int t;
cin>>t;
while(t--){
map<int,int> myMap;
int n;
cin>>n;
while(n--){
string str;
cin>>str;
if(str=="Insert"){
int id,score;
cin>>id>>score;
myMap[id]=score;
}else{
int id;
cin>>id;
map<int,int>::iterator it;
it=myMap.find(id);
if(it!=myMap.end()){
cout<<"name:"<<it->first<<" score:"<<it->second<<endl;
}else{
cout<<"No result!"<<endl;
}
}
}
}
return 0;
}
知识点:
C
/*
输入格式
有一棵多叉树T,你在树根处,宝藏在某一叶子节点L。现在你沿着树枝向叶子方向走去,从不回头,如果遇到树叉节点,
你等概率地挑选一个分支继续走。请问,在给定T,L的情况下,你有多大概率拿到宝藏?
第一行,整数N,M,L(1< N< 1000,0< M< 1000,0< L< N),分别代表树T上的节点数、树枝的个数,宝藏所在节点。
树根为0号结点。然后有M行,每行两个整数A,B(0≤ A,B< N)代表从节点A到节点B有一条树枝。
可以假设节点A总是更靠近树根。
输出格式
所求的概率,输出四舍五入到6位小数,然后换行。
6 5 5
0 1
1 3
0 2
2 4
2 5
*/
# include<cstdio>
# include<cstring>
# include<iostream>
# include<vector>
# define maxv 1000
using namespace std;
vector <int> child[maxv]; //采用邻接表的形式来定义树
int parent[maxv];//parent数组用来记录结点的父亲。
int main(){
int n,m,l;//n代表t上节点数目,树枝的个数,宝藏所在节点
//n代表点的个数,m边的数目
cin>>n>>m>>l;
parent[0]=-1;//根结点的父亲为-1;
while(m--){
int from,to;
cin>>from>>to;
child[from].push_back(to);//边from->to也就是父亲from->儿子to
parent[to]=from;//to的父亲是from
}
int v=parent[l];
double res=1.0;
while(v!=-1){//从顶点v的父亲结点开始,到根结点结束,自下而上
int num=child[v].size();//顶点v孩子的数量
res*=1.0/num;//到顶点v的概率
v=parent[v];
}
printf("%.6f\n",res);
cout<<endl;
}
思路:树的题目很多都可以用邻接表来表示,这题如果用邻接表表示更轻松。我觉得我这道题目做的很简单,欢迎大家使用我的方法。
D 我是直接放弃