复试上机真题历年回顾-2009
字符串编排
1、请输入字符串,最多输入4个字符串,要求后输入的字符串排在前面,例如:
输入:EricZ
输出:1=EricZ
输入:David
输出:1=David 2=EricZ
模拟即可
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
vector<string>str;
signed main(){
freopen("Name.txt","w",stdout);//结果写入Name.txt
int n; cin>>n;
for(int i=1;i<=n;i++){
string t;
cin>>t;
str.push_back(t);
int s =str.size();
int cnt =0;
for(int i=s-1;i>=0;i--){
if(cnt==4) break;
cout<<++cnt<<"="<<str[i]<<" ";
}
cout<<endl;
}
}
分组统计
输入第一行表示样例数m,对于每个样例,第一行为数的个数n,接下来两行分别有n个数,
第一行有n个数,第二行的n个数分别对应上一行每个数的分组,n不超过100。
输入:
1
7
3 2 3 8 8 2 3
1 2 3 2 1 3 1
输出:
1={2=0,3=2,8=1}
2={2=1,3=0,8=1}
3={2=1,3=1,8=0}
- 先用vector存储第一行的数字
- 通过vector[HTML_REMOVED]> v存储第二行的数字
- 去重第一行的数字
- 遍历vector[HTML_REMOVED]> v
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
void sol(){
int n;
cin>>n;
vector<int>t;
for(int i=0;i<n;i++){
int x;
cin>>x;
t.push_back(x);
}
vector<vector<int> >v(n+1);
for(int i=0;i<n;i++){
int x;
cin>>x;
v[x].push_back(t[i]);
}
sort(t.begin(),t.end());
vector<int>tmp;;
for(int i=0;i<t.size();i++){
if(tmp.empty()) tmp.push_back(t[i]);
if(tmp.back()==t[i]) continue;
tmp.push_back(t[i]);
}
int k=0;
for(int i=0;i<=n;i++){
if(v[i].empty()) continue;
map<int,int>mp;
for(int j=0;j<v[i].size();j++)
mp[v[i][j]]++;
cout<<++k<<"={";
for(int j=0;j<tmp.size();j++)
if(j!=tmp.size()-1)
cout<<tmp[j]<<"="<<mp[tmp[j]]<<",";
else cout<<tmp[j]<<"="<<mp[tmp[j]]<<"}"<<endl;
}
}
signed main(){
int t;
cin>>t;
while(t--) sol();
}
单词识别
输入一个英文句子,把句子中的单词(不区分大小写)按出现次数按从多到少把单词和次数在屏幕上输出来,
要求能识别英文句号和逗号,即是说单词由空格、句号和逗号隔开。
输入:
A blockhouse is a small castle that has four openings through which to shoot.
输出:
a:2
blockhouse:1
castle:1
four:1
has:1
is:1
openings:1
shoot:1
small:1
that:1
through:1
to:1
which:1
模拟即可
#include<bits/stdc++.h>
using namespace std;
#define st first
#define se second
const int N =1e3+10;
typedef pair<string,int> psi;
psi v[N];
bool cmp(psi a,psi b){
if(a.second!=b.se)
return a.se>b.se;
return a.st<b.st;
}
int main(){
string str;
while(getline(cin,str)){
map<string,int>mp;
int j =0;
string tmp;
for(int i=0;str[i];i++){
if(str[i]==' '||str[i]==','||str[i]=='.') {
tmp=str.substr(j,i-j);
if(tmp!="")//注意空字符不能进入map
mp[tmp]++;
j=i+1;
}else{
str[i] = tolower(str[i]);
}
}
if(j!=str.length()) mp[str.substr(j)]++;
int cnt=0;
for(map<string,int>::iterator it=mp.begin();it!=mp.end();it++){
v[++cnt] = make_pair(it->st,it->se);
}
sort(v+1,v+cnt+1,cmp);
for(int i=1;i<=cnt;i++){
cout<<v[i].st<<":"<<v[i].se<<endl;
}
}
}