2019北邮计算机院机试真题_北邮计算机机试
目录
- 19计算机院机试考试题目
-
- 题号 A Binary
- 等等
19计算机院机试真题
计算机学院的机试题极具挑战性,在没有任何一道题拥有较高的难度的情况下(即所有题目难度相近),对第4题略带印象(即仅能大致回忆出解法),具体内容已无法回忆(即记忆模糊)。对于准备计算机学院考试的学生来说,并不建议深入研究第4题(即不要把时间浪费在难以掌握的知识点上)。18年的第4题考察了动态规划算法的应用(即这一类型的问题曾多次出现且具有典型性),同样获得了零通过率的结果(即效果不佳)。今年网研机构发布的机试题相对简单(即整体难度有所下降),但仍然有较多题目较为困难(即存在一定挑战性)。
Problem A 二进制
题目描述
输入
输出
测试样例
#include<bits/stdc++.h>
using namespace std;
int ans[32];
string s1="00000000000000000000000000000001";
string s2="00000000000000000000000000000011";
//输出结果函数
void Print()
{
for(int i=0;i<32;i++)
{
cout<<ans[i];
}
cout<<endl;
}
//二进制加法函数
void Add(string a, string b)
{
int carry = 0;//进位
memset(ans,0,sizeof(ans));
for(int i = 31;i>=0;i--)
{
ans[i] = a[i]-'0'+b[i]-'0'+carry;
if(ans[i]>1)//需要进位
{
ans[i] = 0;
carry = 1;
}
else
carry = 0;
}
Print();
}
//主函数
int main()
{
int T;
string s;
cin>>T;
while(T--)
{
cin>>s;
Add(s,s1);
Add(s,s2);
}
return 0;
}
结果截图

Problem B 二叉树
针对二叉树结构
/*
双亲表示法,记录父节点
记录高度
同等高度一起爬找祖先,相等即为最近公共祖先
*/
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e+5;
int high[maxn];//当前结点高度
int fa[maxn];//记录父节点
//初始化函数
void init()
{
fa[1]=0;//
memset(high,0,sizeof(high));
}
//打印
void print(int n)
{
cout<<"结点号"<<"\t"<<"父节点"<<"\t"<<"高度"<<endl;
for(int i=1;i<=n;i++)
{
cout<<i<<"\t"<<fa[i]<<"\t"<<high[i]<<endl;
}
}
//返回最短路径长度
int minlen(int x,int y)
{
int len=0;
int max,min;//记录深浅的两个结点
max = high[x]>high[y]? x:y;
min = high[x]>high[y]? y:x;
//深的结点回到与浅的结点同一高度
while(high[max]!=high[min])
{
max=fa[max];
++len;
}
//同时向上爬
while(max!=min)
{
len+=2;
max=fa[max];
min=fa[min];
}
return len;
}
//主函数
int main()
{
int T;
int n,m;
int x,y;
scanf("%d",&T);
while(T--)
{
init(); //初始化
scanf("%d %d",&n,&m); //读入结点数与查询数
for(int i=1;i<=n;i++) //建树
{
scanf("%d %d",&x,&y);
if(x!=-1)
{
fa[x]=i;
}
if(y!=-1)
{
fa[y]=i;
}
}
for(int i=1;i<=n;i++) //计算高度
{
int cur_node = i;
while(fa[cur_node]!=0)
{
high[i]++;
cur_node=fa[cur_node];
}
}
//print(n); //调试用
for(int i=0;i<m;i++) //读入查询
{
scanf("%d %d",&x,&y);
printf("%d\n",minlen(x,y));
}
}
return 0;
}
用例图

结点双亲表
| 结点 | 双亲 |
|---|---|
| 1 | 0 |
| 2 | 1 |
| 3 | 1 |
| 4 | 2 |
| 5 | 2 |
| 6 | 3 |
| 7 | 5 |
| 8 | 7 |
结点高度表
| 结点 | 高度 |
|---|---|
| 1 | 0 |
| 2 | 1 |
| 3 | 1 |
| 4 | 2 |
| 5 | 2 |
| 6 | 2 |
| 7 | 3 |
| 8 | 4 |
结果截图

代码2(图)
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 1e4;
const int INF = 1e9;
ll d[maxn+1][maxn+1];//最短路径距离
//初始化函数
void init(int n)
{
for(int i=1;i<=n;++i)//初始化d
{
for(int j=1;j<=n;++j)
d[i][j]=i==j?0:INF;
}
}
//弗洛伊德算法
void floyd(int n)
{
for(int k=1;k<=n;++k)
for(int i=1;i<=n;++i)
for(int j=1;j<=n;++j)
{
if(d[i][k]!=INF&&d[k][j]!=INF&&d[i][j]>d[i][k]+d[k][j])
{
d[i][j]=d[i][k]+d[k][j];
}
}
}
//打印函数
void print(int n)
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
cout<<d[i][j]<<" ";
cout<<endl;
}
}
//主函数
int main()
{
int T;
int n,m;
int x,y;
scanf("%d",&T);
while(T--)
{
scanf("%d %d",&n,&m);
init(n); //初始化
for(int i=1;i<=n;++i) //读入边
{
scanf("%d %d",&x,&y);
if(x!=-1)
d[i][x]=d[x][i]=1;//无向图
if(y!=-1)
d[i][y]=d[y][i]=1;
}
floyd(n);
//print(n);
for(int i=1;i<=m;i++)//读入查询
{
scanf("%d %d",&x,&y);
printf("%d\n",d[x][y]);
}
}
return 0;
}
结果截图

Problem C 最短路径
题目描述
在白天和黑夜要从城市1到城市 n ,黑夜会关掉若干条线路,分别寻找城市1到城市 n 的在白天和黑夜的最短路径。
输入
第一行数据组数 T
第二行输入 n , m , k . n 代表城市数, m 代表路径数, k 代表夜间关闭的路径数
接下来 m 行,每行输入两个数 x , y ,代表城市 x 和城市 y 之间连通
最后一行 k 个数,代表晚上关闭的线路序号(线路序号指的是1~ m )
输出
每组数据输出两行,分别代表白天和黑夜,城市1到 n 的最短路径
测试样例
输入
1
4 4 1
1 2
2 3
3 4
1 4
4
输出
1
3
分析
这题之前没有说清楚题意,后面好像说输入数据可能有重边。好像13个3A的,大神看见的话请评论吧
代码
占个坑,有时间写
Problem D 方块阵
这个确实记不起来了呢?有没有人还记得再说一遍啊呢?说不定下届学弟学妹里会有高才生吧?准备4A
投入了职业生涯的开发经验,并且已经掌握了多种编程语言;我深刻认识到,在学习一门新语言的过程中,学习资源的价值无与伦比;过去几年里我已经收集了许多有用的Python学习资料;然而就个人而言这些资源似乎不再那么实用;但对于那些打算从零开始学习Python的人来说无价之宝就是它们;因为它们能够帮助你节省大量时间和精力
不要在网上瞎学了。我最近分享了一些新的资源。只要你是我的粉丝,这期福利你可以免费领取。
我先来介绍一下这些东西怎么用,文末抱走。
(1)Python所有方向的学习路线(新版)
这个项目是我耗了几天时间对Python技术各个方向的知识点进行归纳总结的结果,在不同领域都形成了系统的知识体系。它的主要作用体现在你可以通过查阅相关知识点来查找对应的学习资料以确保学习的全面性。
最近我才对这些路线做了一下新的更新,知识体系更全面了。

(2)Python学习视频
涵盖Python入门课程、爬虫技术以及数据分析与Web开发的相关学习视频内容。约100个课程视频中,并不包含所有领域的内容(但内容相对单一),但对于初学者来说足够基础)。完成这些学习后,请你参考我的学习路径,在网上寻找更多的相关知识资源继续深入学习。

(3)100多个练手项目
当我们在观看视频进行学习时,“不必仅仅停留在视觉和思维的层面”,而应该采取一种更加科学的方法——在理解的基础上运用所学知识。这个时候,“项目的种类繁多”,整体水平参差不齐,“建议大家根据自身能力选择合适的项目进行实践操作。”

(4)200多本电子书
这些年我也收集了大量的电子书籍,近两百本。有时候觉得带实体书籍不太方便的时候,我会选择翻阅电子版阅读。其实电子书籍未必就比视频教程逊色多少吧?特别是权威的技术书籍。
主要涵盖主流类别的经典案例
(5)Python知识点汇总
知识体系类似于课程规划,在主要区别在于:知识体系更加详细地涵盖各个具体知识点,并提供了对各个具体知识点的简明扼要介绍;相比之下,在知识体系中所涉及的技术方向则更为系统和全面,并且其目标是为了帮助大家更好地理解或掌握某个领域的相关技术栈。

(6)其他资料
除此之外还有一些其他的资源分享给粉丝们呢比如我本人制作了一个适合新手学习Python的基础入门教程即使没有电脑设备在手边也可以随时随地通过手机进行学习即使没有电脑设备在手边也可以随时随地通过手机进行学习此外还包括了详细的Python官方文档中文版库资料介绍以及MySQL数据库操作指南和HTML标签使用技巧等这些都是特别为粉丝准备的学习资料

这些并不是特别昂贵的东西,在缺乏资金或资源质量不高的情况下仍然具有一定的价值。如果你需要的话可以直接拿走。了解我的人都清楚这些都是可以获取的。
丰富的学习资源在网络时代层出不穷。然而,在知识体系不够完善的情况下,在面对具体问题时往往停留在表面层次而非深入探究,则难以实现真正的技术进步。
想要一份系统化学习资料的朋友,请问能不能点击这里免费获取?
单独一个人走得快,但一群人才能走得更远!无论你是IT行业的资深从业者还是新手,我们始终以开放包容的态度欢迎你!在这里你可以进行技术交流,获取学习资源,分享职场趣事,了解知名企业的大厂内推信息以及获得专业的面试辅导,让我们共同进步吧!
