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

	}
相关推荐
17(无规则自律)38 分钟前
【CSAPP 读书笔记】第二章:信息的表示和处理
linux·嵌入式硬件·考研·高考
飞机和胖和黄1 小时前
考研之王道C语言第三周
c语言·数据结构·考研
LBJ辉1 天前
第 8 章 排序
数据结构·考研·算法·排序算法
番茄大王sc3 天前
2026年科研AI工具深度测评(一):文献调研与综述生成领域,维普科创助手领跑学术严谨性
人工智能·深度学习·考研·学习方法·论文笔记
70asunflower3 天前
Zotero论文阅读标记颜色框架
人工智能·学习·考研
飞机和胖和黄6 天前
考研之C语言第二周作业
c语言·开发语言·考研
Three~stone8 天前
【27考研资料合集|无偿分享,持续更新中[特殊字符]】
考研
小W子8 天前
2026.1.23小记
考研·学习方法
Three~stone9 天前
27考研资源合集(持续更新)
考研
WebGIS开发10 天前
2026想从事GIS开发有必要考研吗?
考研·gis开发·webgis·地理信息科学