2025年北京邮电大学计算机考研复试机试真题(解题思路 + AC 代码)
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[i−1]×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’;
}
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐

所有评论(0)