北理工计算机考研复试上机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;

	}
相关推荐
killerbasd15 分钟前
总结 7.22
考研
岑梓铭2 天前
《考研408数据结构》第七章(7.1 查找:顺序查找、折半查找、分块查找)复习笔记
数据结构·笔记·考研·408·ds·查找
因你入海底3 天前
【考研】2026/7/17
考研·11408
killerbasd3 天前
总结 7.19
考研
tyqtyq224 天前
HarmonyOS AI 应用开发实战:考研择校分析系统
人工智能·学习·考研·华为·生活·harmonyos
汤姆百宝箱6 天前
2026考研英语(一)历年真题及答案解析(1980-2026年)(pdf电子版)
考研·历年真题·答案解析·全国硕士研究生招生考试·英语一
岑梓铭7 天前
《考研408数据结构》第六章(6.3 图的遍历)复习笔记
数据结构·笔记·考研··拓扑排序·408
我没胡说八道8 天前
论文排版避坑指南|按问题选工具,不踩坑,选好工具
人工智能·深度学习·考研·计算机视觉·自然语言处理·论文
蓝桉(努力版)10 天前
27考研资料合集
考研
一杯奶茶¥11 天前
c语言程序设计大学期末考试考研知识点重点笔记题库复习资料C语言重点考点题库资料合集
c语言·笔记·考研·c语言程序设计·c语言笔记