北理工计算机考研复试上机2014年真题

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

代码:

cpp 复制代码
#include <bits/stdc++.h>

using namespace std;
vector<int> ans;
int main()
{
    cout << "请输入:";
    int a;
    while (cin >> a) {
        int flag = false; // 当前输入不在最近访问列表
        for (int i = ans.size()-1, cnt = 0; i >= 0 && cnt < 3; i--, cnt++) {
            if (ans[i] == a) {
                flag = true;
                break;
            }
        }
        if (!flag) ans.push_back(a);
        
        for (int i = ans.size()-1, cnt = 0; i >= 0 && cnt < 3; i--, cnt++) {
            cout << ans[i];
            if (i != 0) cout << ',';
        }
        cout << endl;
        cout << "请输入:";
    }
    return 0;
}

2、在第1题基础上,稍作改动,显示最新打开的文件.

示例:

输入: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

代码:

cpp 复制代码
#include <bits/stdc++.h>

using namespace std;
vector<int> ans;
int main()
{
    cout << "请输入:";
    int a;
    while (cin >> a) {
        int flag = false; // 当前输入不在最近访问列表
        for (int i = ans.size()-1, cnt = 0; i >= 0 && cnt < 3; i--, cnt++) {
            if (ans[i] == a) {
                flag = true;
                break;
            }
        }
        if (!flag) ans.push_back(a);
        else if (flag) {  // 访问的数据a如果已在最近列表中,则.。。
            int idx = -1;
            for (int i = ans.size()-1, cnt = 0; i >= 0 && cnt < 3; i--, cnt++) {
                if (ans[i] == a){
                    idx = i;
                    break;
                } 
            }    
            while (idx < ans.size()-1) {  // 这里就是将数据a交换到列表末尾
                int temp = ans[idx];
                ans[idx] = ans[idx+1];
                ans[idx+1] = temp;
                idx++;
            }
        }
        
        for (int i = ans.size()-1, cnt = 0; i >= 0 && cnt < 3; i--, cnt++) {
            cout << ans[i];
            if (i != 0) cout << ',';
        }
        cout << endl;
        cout << "请输入:";
    }
    return 0;
}

3、求广义表的深度(实际就是括号匹配),示例:输入(c,((d,e),f),h)

输出:3

提示:答案就是匹配过程中栈的最大深度

代码:

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
	string s;
	cin >> s;
	stack<char> st;
	int m = 0;
	for (int i = 0; i < s.size(); i++) {
		if (s[i] == '(') {
			st.push(s[i]); // 左括号进栈
			m = max(m, (int)st.size());  // 因为st.size()返回的是一个无符号整数,而max要求比较的两个数据类型一样,所以要将st.size()从无符号整数强转成有符号整数 更新栈的最大 大小
		}
		else if (s[i] == ')') st.pop();  // 遇到右括号 栈顶一定是左括号   括号一定是匹配的
	}

	cout << m << endl;

	}
相关推荐
丰锋ff15 小时前
2015 年真题配套词汇单词笔记(考研真相)
考研
岑梓铭2 天前
《考研408数据结构》第三章(3.1 栈)复习笔记
数据结构·笔记·考研·408
丰锋ff2 天前
2009 年真题配套词汇单词笔记(考研真相)
笔记·学习·考研
丰锋ff2 天前
2019 年真题配套词汇单词笔记(考研真相)
考研
丰锋ff2 天前
2020 年真题配套词汇单词笔记(考研真相)
考研
丰锋ff2 天前
2014 年真题配套词汇单词笔记(考研真相)
学习·考研
蒙奇D索大2 天前
【数据结构】数据结构秘籍:如何衡量“查找”的快慢?ASL是关键!
数据结构·笔记·学习·考研
蒙奇D索大2 天前
【数据结构】考研重点掌握:顺序查找算法实现与ASL计算详解
数据结构·笔记·学习·考研·算法·改行学it
岑梓铭3 天前
计算机网络第四章(4)——网络层《IPV6》
服务器·网络·计算机网络·考研·408
丰锋ff4 天前
2006 年真题配套词汇单词笔记(考研真相)
笔记·学习·考研