2025年北京邮电大学计算机考研复试机试真题

2025年北京邮电大学计算机考研复试上机真题

历年北京邮电大学计算机考研复试上机真题

历年北京邮电大学计算机考研复试机试真题

更多学校完整题目开源地址:https://gitcode.com/u014339447/pgcode

百度一下pgcode 即可查看,输入 “学校名称” 即可筛选该校历年机试真题,包括真题、ac代码、解题思路、视频讲解。

统计三角形-北京邮电大学

题目描述

给定一个数组 e d g e s {edges} edges,其中 e d g e s [ i ] {edges[i]} edges[i] 表示边的长度。请你计算数组中可以从中选出三条边构成三角形的三元组数量。

输入格式

一个整数数组 e d g e s {edges} edges,表示边的长度。

输出格式

返回可以构成三角形的三元组数量。

数据范围

数组长度 [ 3 , 1000 ] {[3, 1000]} [3,1000],边长为正整数。

输入样例
2 2 3 4
输出样例
3
#include<bits/stdc++.h>
using namespace std;

int a[1001];
int x;

bool judge(int a, int b, int c) {
    if(a + b > c && a + c > b && b + c > a) return true;
    else return false;
}

int main() {
    int cnt = 0;
    while(cin >> x) {a[cnt++] = x;}
    int ans = 0;
    for(int i = 0; i < cnt; i++) {
        for(int j = i + 1; j < cnt; j++) {
            for(int k = j + 1; k < cnt; k++) {
                if(judge(a[i], a[j], a[k])) {
                    ans++;
                }
            }
        }
    }
    cout << ans << '\n';
}

矩阵连乘-北京邮电大学

题目描述

给定一个数组 p {p} p,长度为 ( n + 1 ) {(n+1)} (n+1),表示 n {n} n 个矩阵的维度信息。第 i {i} i 个矩阵的大小为 p [ i − 1 ] × p [ i ] {p[i-1] \times p[i]} p[i1]×p[i]。请计算以最少的标量乘法次数将这些矩阵按顺序连乘的结果。

输入格式

一个整数数组 p {p} p,表示矩阵的维度。

输出格式

返回矩阵连乘所需的最少标量乘法次数。

数据范围

n {n} n 的范围为 [ 1 , 100 ] {[1, 100]} [1,100] p [ i ] {p[i]} p[i] 的范围为 [ 1 , 100 ] {[1, 100]} [1,100]

输入样例
10 30 5 60
输出样例
4500
#include <iostream>
#include <vector>
#include <climits>  // 用于INT_MAX(表示无穷大)

using namespace std;

// 计算矩阵连乘的最少标量乘法次数
int matrixChainMinMult(const vector<int>& p) {
    // n是矩阵的个数(p的长度 = 矩阵数 + 1)
    int n = p.size() - 1;
    // 初始化dp二维数组,dp[i][j]表示第i到第j个矩阵连乘的最少乘法次数
    // 矩阵编号从1开始,因此创建(n+1)x(n+1)的二维数组(0行0列不用)
    vector<vector<int>> dp(n + 1, vector<int>(n + 1, 0));

    // 遍历矩阵链的长度(从2开始,长度为1时dp[i][i]=0,无需计算)
    for (int length = 2; length <= n; ++length) {
        // 遍历所有可能的起始矩阵i
        for (int i = 1; i <= n - length + 1; ++i) {
            // 计算结束矩阵j
            int j = i + length - 1;
            // 初始化为无穷大(INT_MAX),方便后续取最小值
            dp[i][j] = INT_MAX;

            // 遍历所有可能的分割点k(i ≤ k < j)
            for (int k = i; k < j; ++k) {
                // 状态转移:计算当前分割方式的总乘法次数
                int current = dp[i][k] + dp[k+1][j] + p[i-1] * p[k] * p[j];
                // 更新最小值
                if (current < dp[i][j]) {
                    dp[i][j] = current;
                }
            }
        }
    }

    // dp[1][n]即为1到n个矩阵连乘的最少标量乘法次数
    return dp[1][n];
}

int main() {
    vector<int> p ;
    int n;
    while(cin>>n){
        p.push_back(n);
    }
    int minTimes = matrixChainMinMult(p);
    cout << minTimes; 
    return 0;
}

矩阵的行列式-北京邮电大学

题目描述

给定一个(3 * 3)的矩阵 A {A} A,计算其行列式的值。

输入格式

一个(3 * 3)的整数矩阵 A {A} A

输出格式

返回矩阵的行列式值。

数据范围

矩阵元素的范围为 [ − 100 , 100 ] {[-100, 100]} [100,100]

输入样例
1 2 3
4 5 6
7 8 9
输出样例
0
#include <iostream>
using namespace std;

int main() {
    int a[3][3];
    // 输入矩阵
    for (int i = 0; i < 3; ++i)
        for (int j = 0; j < 3; ++j)
            cin >> a[i][j];
    
    // 计算行列式
    int det = a[0][0] * (a[1][1] * a[2][2] - a[1][2] * a[2][1])
            - a[0][1] * (a[1][0] * a[2][2] - a[1][2] * a[2][0])
            + a[0][2] * (a[1][0] * a[2][1] - a[1][1] * a[2][0]);
    
    cout << det << endl;
    return 0;
}

哈夫曼树-北京邮电大学

题目描述

哈夫曼树,第一行输入一个数 n n n,表示叶结点的个数。

需要用这些叶结点生成哈夫曼树。

根据哈夫曼树的概念,这些结点有权值,即 w e i g h t weight weight,题目需要输出所有结点的值与权值(到根节点的路径长度)的乘积之和。

输入格式

输入有多组数据。

每组第一行输入一个数 n n n,接着输入 n n n 个叶节点(叶节点权值不超过 100 100 100 2 < = n < = 1000 2 <= n <= 1000 2<=n<=1000)。

输出格式

输出权值。

输入样例
5
1 2 2 5 9
输出样例
37
#include<bits/stdc++.h>
using namespace std;

int n;
int x;
priority_queue<int,vector<int>, greater<int>> que; 

int main() {
    cin >> n;
    int ans = 0;
    for(int i = 0; i < n; i++) {cin >> x ;que.push(x);}
    while(que.size() > 1) {
        int tp1 = que.top(); que.pop();
        int tp2 = que.top(); que.pop();
        ans += (tp1 + tp2);
        que.push(tp1 + tp2);
    }
    cout << ans << '\n';
}

for(int i = 0; i < n; i++) {cin >> x ;que.push(x);}
while(que.size() > 1) {
int tp1 = que.top(); que.pop();
int tp2 = que.top(); que.pop();
ans += (tp1 + tp2);
que.push(tp1 + tp2);
}
cout << ans << ‘\n’;
}


Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐