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>usingnamespacestd;inta[1001];intx;booljudge(inta,intb,intc){if(a+b>c&&a+c>b&&b+c>a)returntrue;elsereturnfalse;}intmain(){intcnt=0;while(cin>>x){a[cnt++]=x;}intans=0;for(inti=0;i<cnt;i++){for(intj=i+1;j<cnt;j++){for(intk=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(表示无穷大)usingnamespacestd;// 计算矩阵连乘的最少标量乘法次数intmatrixChainMinMult(constvector<int>&p){// n是矩阵的个数(p的长度 = 矩阵数 + 1)intn=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(intlength=2;length<=n;++length){// 遍历所有可能的起始矩阵ifor(inti=1;i<=n-length+1;++i){// 计算结束矩阵jintj=i+length-1;// 初始化为无穷大(INT_MAX),方便后续取最小值dp[i][j]=INT_MAX;// 遍历所有可能的分割点k(i ≤ k < j)for(intk=i;k<j;++k){// 状态转移:计算当前分割方式的总乘法次数intcurrent=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个矩阵连乘的最少标量乘法次数returndp[1][n];}intmain(){vector<int>p;intn;while(cin>>n){p.push_back(n);}intminTimes=matrixChainMinMult(p);cout<<minTimes;return0;}矩阵的行列式-北京邮电大学
题目描述
给定一个(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>usingnamespacestd;intmain(){inta[3][3];// 输入矩阵for(inti=0;i<3;++i)for(intj=0;j<3;++j)cin>>a[i][j];// 计算行列式intdet=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;return0;}哈夫曼树-北京邮电大学
题目描述
哈夫曼树,第一行输入一个数n nn,表示叶结点的个数。
需要用这些叶结点生成哈夫曼树。
根据哈夫曼树的概念,这些结点有权值,即w e i g h t weightweight,题目需要输出所有结点的值与权值(到根节点的路径长度)的乘积之和。
输入格式
输入有多组数据。
每组第一行输入一个数n nn,接着输入n nn个叶节点(叶节点权值不超过100 100100,2 < = n < = 1000 2 <= n <= 10002<=n<=1000)。
输出格式
输出权值。
输入样例
5 1 2 2 5 9输出样例
37#include<bits/stdc++.h>usingnamespacestd;intn;intx;priority_queue<int,vector<int>,greater<int>>que;intmain(){cin>>n;intans=0;for(inti=0;i<n;i++){cin>>x;que.push(x);}while(que.size()>1){inttp1=que.top();que.pop();inttp2=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’;
}