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

	}
相关推荐
CS创新实验室18 小时前
《计算机网络》深入学:从自治系统内部到全球互联
计算机网络·考研·智能路由器·协议·408
元亓亓亓1 天前
考研408--数据结构--day6--串
数据结构·考研··408
西电研梦1 天前
26西电考研 | 寒假开始,机试 or C语言程序设计怎么准备?
c语言·考研·华为od·研究生·西安电子科技大学·计算机408
元亓亓亓2 天前
考研408--数据结构--day5--栈与队列的应用
数据结构·考研··408·队列
飞机和胖和黄2 天前
王道考研C语言第五周
c语言·考研·算法
Angelina_Jolie6 天前
一文搞懂 SCI、SSCI、CSSCI、C 刊、核心期刊:定义、作用、层级对比及投稿选择
考研·职场和发展·创业创新
17(无规则自律)6 天前
【CSAPP 读书笔记】第二章:信息的表示和处理
linux·嵌入式硬件·考研·高考
飞机和胖和黄6 天前
考研之王道C语言第三周
c语言·数据结构·考研
LBJ辉7 天前
第 8 章 排序
数据结构·考研·算法·排序算法
番茄大王sc9 天前
2026年科研AI工具深度测评(一):文献调研与综述生成领域,维普科创助手领跑学术严谨性
人工智能·深度学习·考研·学习方法·论文笔记