复试上机真题历年回顾-2014
打开文件(1)
1、系统中有最近打开文件的记录,现用整数表示打开的文件名,且只显示最近3个
打开的文件,输出文件序列。
示例:
输入: 1
输出: 1
输入: 2
输出: 2,1
输入: 3
输出: 3,2,1
输入: 4
输出: 4,3, 2
输入: 1
输出: 1,4,3
输入: 4
输出: 1,4,3
输入: 3
输出: 1,4,3
简单模拟一下即可
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
map<int,int>mp;
vector<int>s2;
int cnt;
signed main(){
int num;
while(cin>>num){
mp[num]++;
if(mp[num]>1) {
int idx;
for(int i=0;i<s2.size();i++)
if(s2[i]==num){
idx =i;
break;
}
if(s2.size()-1-idx>2){
for(int i=idx;i<s2.size();i++) s2[i]=s2[i+1];
s2[s2.size()-1]=num;
}
}
else {
s2.push_back(num);
}
for(int i=s2.size()-1;i>=0;i--) {
++cnt;
if(cnt==4) break;//最多输出三个数
if(cnt==3) cout<<s2[i]<<endl;
else cout<<s2[i]<<",";
}
if(cnt<3) cout<<endl;
cnt=0;
}
return 0;
}
打开文件(2)
在第一题的基础上,稍作改动,显示最新打开的文件。
输入:1.
输出: 1
输入: 2
输出: 2,1
输入: 3
输出:3,2,1
输入: 4
输出:4,3,2
输入: 1
输出:1,4,3
输入: 4
输出:4,1,3
输入: 3
输出: 3,4,1
模拟即可
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
map<int,int>mp;
vector<int>s2;
int cnt;
signed main(){
int num;
while(cin>>num){
mp[num]++;
if(mp[num]>1) {
int idx;
for(int i=0;i<s2.size();i++)
if(s2[i]==num){
idx =i;
break;
}
for(int i=idx;i<s2.size();i++) s2[i]=s2[i+1];
s2[s2.size()-1]=num;
}
else {
s2.push_back(num);
}
for(int i=s2.size()-1;i>=0;i--) {
++cnt;
if(cnt==4) break;//最多输出三个数
if(cnt==3) cout<<s2[i]<<endl;
else cout<<s2[i]<<",";
}
if(cnt<3) cout<<endl;
cnt=0;
}
return 0;
}
求广义表深度
本质就是括号匹配
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
#define x first
#define y second
string str;
int maxn,cnt;
signed main(){
getline(cin,str);
for(int i=0;i<str.length();i++){
if(str[i]=='('){
++cnt;
maxn=max(maxn,cnt);
}else if(str[i]==')'){
--cnt;
}
}
cout<<maxn<<endl;
}