北京航空航天大学计算机复试上机真题
2023北京航空航天大学计算机复试上机真题
在线评测:https://app2098.acapp.acwing.com.cn/
阶乘和
题目描述
求Sn=1!+2!+3!+4!+5!+...+n!
之值,其中n是一个数字。
输入格式
输入一个n(n<=20)
输出格式
输出Sn,Sn可能超出int范围
输入样例
5
输出样例
153
最简真分数
题目描述
给出n个正整数,任取两个数分别作为分子和分母组成最简真分数,编程求共有几个这样的组合。
输入格式
多组测试数据,每组包含n(n<=600)和n个数,整数大于1且小于等于1000。
输出格式
每行输出最简真分数组合的个数。
输入样例
7
3 5 7 9 11 13 15
输出样例
17
八皇后
题目描述
会下国际象棋的人都很清楚:皇后可以在横、竖、斜线上不限步数地吃掉其他棋子。如何将8个皇后放在棋盘上(有8 * 8个方格),使它们谁也不能被吃掉!这就是著名的八皇后问题。 对于某个满足要求的8皇后的摆放方法,定义一个皇后串a与之对应,即a=b1b2...b8,其中bi为相应摆法中第i行皇后所处的列数。已经知道8皇后问题一共有92组解(即92个不同的皇后串)。 给出一个数b,要求输出第b个串。串的比较是这样的:皇后串x置于皇后串y之前,当且仅当将x视为整数时比y小。
输入格式
每组测试数据占1行,包括一个正整数b(1 <= b <= 92)
输出格式
输出有n行,每行输出对应一个输入。输出应是一个正整数,是对应于b的皇后串。
输入样例
1
输出样例
15863724
素数
题目描述
输入一个整数n(2<=n<=10000),要求输出所有从1到这个整数之间(不包括1和这个整数)个位为1的素数,如果没有则输出-1。
输入格式
输入包含多组测试数据。
每组数据占一行,包含一个整数 n。
输出格式
每组数据输出占一行,由小到大输出所有满足条件的素数,素数之间单个空格隔开。如果没有则输出 −1−1。
输入样例
100
输出样例
11 31 41 61 71
旋转矩阵
题目描述
任意输入两个9阶以下矩阵,要求判断第二个是否是第一个的旋转矩阵,如果是,输出旋转角度(0、90、180、270),如果不是,输出-1。
输入格式
第一行包含整数 n,表示矩阵阶数。
接下来 n 行,每行包含 n 个空格隔开的整数,表示第一个矩阵。
再接下来 n 行,每行包含 n 个空格隔开的整数,表示第二个矩阵。
输出格式
判断第二个是否是第一个的旋转矩阵,如果是,输出旋转角度(0、90、180、270),如果不是,输出-1。
如果旋转角度的结果有多个,则输出最小的那个。
输入样例
3
1 2 3
4 5 6
7 8 9
7 4 1
8 5 2
9 6 3
输出样例
90
字符串匹配
题目描述
给定一个包含 n 个字符串的字符串数组 s1,s2,...,sn 和一个短字符串 p,找出字符串数组中所有能够和短字符串匹配的字符串。
匹配时不区分大小写,短字符串中可能包含若干个用中括号表示的模式匹配。
例如,对于 aa[123]bb
,字符串 aa1bb
、aa2bb
、aa3bb
均可与其匹配(每次匹配只能与中括号中的任意单个字符进行匹配)。
输入格式
第一行包含整数 n,表示字符串数组中的字符串个数。
接下来 n 行,第 i 行包含一个字符串表示 si。
最后一行,包含一个字符串表示 p。
输出格式
输出可以匹配的字符串的下标和该字符串。
数据范围
1≤n≤1000,
si 的长度不超过 10,
p 的长度不超过 50,
所有字符串中只包含大小写字母、数字、[]
。
输入样例
4
Aab
a2B
ab
ABB
a[a2b]b
输出样例
1 Aab
2 a2B
4 ABB
迭代求立方根
题目描述
立方根的逼近迭代方程是 y(n+1) = y(n)2/3 + x/(3y(n)*y(n)),其中y0=x.求给定的x经过n次迭代后立方根的值。
输入格式
输入有多组数据。
每组一行,输入x n。
输出格式
迭代n次后的立方根,double精度,保留小数点后面六位。
输入样例
4654684 1
65461 23
输出样例
3103122.666667
40.302088
等差序列
题目描述
给定闭区间[a,b] ,要求输出 连续的素数的等差序列,三个以上才算是序列,例如 [100,200] 会输出 151 157 163
再例如输入[1,100] 会有两个等差序列,3 5 7 和47 53 59。输出样式行末的空格保留。
输入格式
输入两个正整数a和b,其中a和b小于等于10000。
输出格式
参考输出样例
输入样例
141 400
输出样例
151 157 163
167 173 179
199 211 223
251 257 263 269
367 373 379
year
2019
三叉树
题目描述
一个关于三叉树的题目,小于100的值代表树叶,大于100的值为分支点,建树的过程是水平方向建树,
输入格式:
先输入n,代表有n组数据,接下来n行,输入4个数,第一个数代表根节点,接下来分别代表三个子节点,-1代表子节点不存在,输入的顺序按照层次遍历的次序。接下来,要求寻找叶子节点的最短路径,最短路径是指不经过重复的边。输入方式,首先输入一个值m,代表m行,接下来m行输入m个叶子节点和对应的优先级,要求按优先级输出从上次到达的位置到该节点的最短路径,每条路径的最后一个节点要求输出目标叶子节点,最后要求回到根节点。
输入格式
见题目描述
输出格式
见输出样例
输入样例
10
100 101 108 107
101 1 102 2
108 103 104 105
107 17 109 18
102 3 4 5
103 7 8 9
104 10 106 11
105 15 16 -1
109 19 20 21
106 12 13 14
5
8 1
14 3
16 2
5 0
19 4
输出样例
100 101 102 5
102 101 100 108 103 8
103 108 105 16
105 108 104 106 14
106 104 108 100 107 109 19
109 107 100
year
2019
连续合数段
题目描述
给定区间 [a,b],输出这个区间里最长的连续合数段。
输入格式
一行,两个整数 a,bb。
输出格式
一行,输出最长的连续合数段。
如果答案不唯一,则输出首项最小的那一段。
数据范围
1≤a≤b≤10000
输入样例
1 10
输出样例
8 9 10
year
2019
空闲块
题目描述
在操作系统中,空闲存储空间通常以空闲块链表方式组织,每个块包含块起始位置、块长度及一个指向下一块的指针。空闲块按照存储位置升序组织,最后一块指向第一块(构成循环链表)。当有空间申请请求时,按照如下原则在空闲块循环链表中寻找并分配空闲块:
1)从当前位置开始遍历空闲块链表(初始是从地址最小的第一个空闲块开始),寻找满足条件的最小块(即:大于等于请求空间的最小空闲块,如果有多个大小相同的最小空闲块,则选择遍历遇到的第一个空闲块)(最佳适应原则);
2)如果选择的空闲块恰好与请求的大小相符合,则将它从链表中移除并返回给用户;这时当前位置变为移除的空闲块指向的下一空闲块;
3)如果选择的空闲块大于所申请的空间大小,则将大小合适的空闲块返回给用户,剩下的部分留在空闲块链表中;这时当前位置仍然为该空闲块;
4)如果找不到足够大的空闲块,则申请失败;这时当前位置不变。
例如:下图示例给出了空闲块链表的初始状态,每个结点表示一个空闲块,结点中上面的数字指空闲块的起始位置,下面的数字指空闲块的长度,位置和长度都用正整数表示,大小不超过int表示范围。当前位置为最小地址为1024的空闲块。

若有4个申请空间请求,申请的空间大小依次为:1024、2560、10240和512。则从当前位置开始遍历上图的链表,按照上述原则寻找到满足条件的最小块为地址是16384的空闲块,其长度正好为1024,所以将其从链表中删除,这时链表状态如下图所示,当前位置变成地址为32768的空闲块。

从当前位置开始为第二个空间请求(大小为2560)遍历链表,按照上述原则寻找到满足条件的最小块为地址是80896的空闲块,其长度为3072,大于请求的空间大小,于是申请空间后该空闲块剩余的长度为512,当前位置为地址是80896的空闲块,链表状态如下图所示:

从当前位置开始为第三个空间请求(大小为10240)遍历链表,遍历一圈后发现找不到足够大的空闲块,则忽略该请求,当前位置不变。下面继续为第四个空间请求(大小为512)遍历链表,按照上述原则寻找到满足条件的最小块为当前位置的空闲块,其长度等于请求的空间大小,于是将该空闲块删除后,链表状态变为下图所示:

编写程序,模拟上述空闲空间申请。
输入格式
第一行包含正整数 N,表示空闲块个数。
接下来 N 行,每行包含两个正整数,按照起始位置由小到大的顺序依次描述每个空闲块的起始位置和长度。
最后一行包含若干正整数,按照申请的先后顺序依次描述每个申请的空间大小,最后以一个 -1
表示结束。
输出格式
按照上述原则模拟完空闲空间申请后,输出当前空闲空间链表状态,即从当前位置开始,遍历链表,分行输出剩余空闲块的起始位置和长度,位置和长度之间以一个空格分隔。
若申请完后,链表中没有空闲块,则什么都不输出。
数据范围
1≤N≤100
申请请求的个数范围 [1,100],
每个空闲块的起始位置和长度以及每个申请的空间大小的取值范围 [1,109]。
输入样例
12
1024 2048
8192 512
16384 1024
32768 8192
65536 8192
77824 1024
80896 3072
86016 1024
91136 5120
99328 512
104448 1024
112640 3072
1024 2560 10240 512 1024 6400 512 -1
输出样例
104448 1024
112640 3072
1024 2048
8192 512
32768 1792
65536 8192
77824 1024
91136 5120
year
2021
题目描述
假设某机场所有登机口(Gate)呈树形排列(树的度为3),安检处为树的根,如下图所示。图中的分叉结点(编号大于等于100)表示分叉路口,登机口用小于100的编号表示(其一定是一个叶结点)。通过对机场所有出发航班的日志分析,得知每个登机口每天的平均发送旅客流量。作为提升机场服务水平的一个措施,在不改变所有航班相对关系的情况下(即:出发时间不变,原在同一登机口的航班不变),仅改变登机口(例如:将3号登机口改到5号登机口的位置),使得整体旅客到登机口的时间有所减少(即:从安检口到登机口所经过的分叉路口最少)。

编写程序模拟上述登机口的调整,登机口调整规则如下:
- 首先按照由大到小的顺序对输入的登机口流量进行排序,流量相同的按照登机口编号由小到大排序;
- 从上述登机口树的树根开始,按照从上到下(安检口在最上方)、从左到右的顺序,依次放置上面排序后的登机口。
例如上图的树中,若只考虑登机口,则从上到下有三层,第一层从左到右的顺序为:5、6、14、13,第二层从左到右的顺序为:7、8、9、10、1、2、18、17、16、15,第三层从左到右的顺序为:11、12、3、4、20、19。
若按规则1排序后流量由大至小的前五个登机口为3、12、16、20、15,则将流量最大的3号登机口调整到最上层且最左边的位置(即:5号登机口的位置),12号调整到6号,16号调整到14号,20号调整到13号,15号调整到第二层最左边的位置(即7号登机口的位置)。
输入格式
首先输入一个整数表示树结点关系的条目数。
接着在下一行开始,按层次从根开始依次输入树结点之间的关系。其中分叉结点编号从数字 100 开始(树根结点编号为 100,其它分叉结点编号没有规律但不会重复),登机口为编号小于 100 的数字(编号没有规律但不会重复,其一定是一个叶结点)。
树中结点间关系用下面方式描述:
R S1 S2 S3
其中 R 为分叉结点,从左至右 S1,S2,S3 分别为树叉 R 的子结点,其可为树叉或登机口,由于树的度为 3,S1,S2,S3 中至多可以 2 个为空,该项为空时用 -1
表示。
如:
100 101 102 103
表明编号 100 的树根有三个子叉,编号分别为 101、102 和 103。
又如:
104 7 8 -1
表明树叉 104 上有 2 个编号分别为 7 和 8 的登机口。
假设分叉结点数不超过 100 个。
分叉结点输入的顺序不确定,但可以确定:输入某个分叉结点信息时,其父结点的信息已经输入。
在输入完树结点关系后,接下来输入登机口的流量信息,每个登机口流量信息分占一行,分别包括登机口编号( 1∼99之间的整数)和流量(大于 0 的整数),两整数间以一个空格分隔。
输出格式
按照上述调整规则中排序后的顺序(即按旅客流量由大到小,流量相同的按照登机口编号由小到大)依次分行输出每个登机口的调整结果:先输出调整前的登机口编号,再输出要调整到的登机口编号。编号间均以一个空格分隔。
数据范围
分叉结点数量 [1,100],
分叉结点编号不超过 300。
登机口数量 [1,99],
流量数据范围 [1,10000]
输入样例
12
100 101 102 103
103 14 108 13
101 5 104 6
104 7 8 -1
102 105 106 107
106 1 110 2
108 16 15 -1
107 18 111 17
110 3 4 -1
105 9 109 10
111 20 19 -1
109 11 12 -1
17 865
5 668
20 3000
13 1020
11 980
8 2202
15 1897
6 1001
14 922
7 2178
19 2189
1 1267
12 3281
2 980
18 1020
10 980
3 1876
9 1197
16 980
4 576
输出样例
12 5
20 6
8 14
19 13
7 7
15 8
3 9
1 10
9 1
13 2
18 18
6 17
2 16
10 15
11 11
16 12
14 3
17 4
5 20
4 19
year
2021
手机基站
题目描述
一共6个手机基站,具有记录手机连接基站的能力,6个手机基站分别记为ABCDEF,他们具有自己的覆盖范围且任何两个基站的覆盖范围不相交,基站保存的手机登陆日志包括手机号(11位,用字符串保存)、基站编号、登陆时间(6位数字,用字符串保存)、登出时间(6位,用学符串保存)
读入某一天多个基站的手机登陆日志信息和一个要查找的人员手机号,查找与该人员同时空的手机号
输入:一个N和N条登陆日志信息,最后还有一个要查找人员的手机号
输出:输出与要查找人员时间和地点有重叠的人员信息(即日志信息),依次输出手机号、基站编号、登陆时间和登出时间; 按照登陆时间进行排序,如果登陆时间相同按照手机号进行排序(如果一个人员的登出时间和另一个人员的登陆时间相同也算时间重叠)
输入格式
见题目
输出格式
见题目
输入样例
7
11111 A 080000 225959
22222 B 080000 225959
33333 A 100000 110000
44444 B 101000 110000
55555 A 120000 131000
66666 A 225959 235959
77777 A 100000 120000
11111
输出样例
33333 A 100000 110000
77777 A 100000 120000
55555 A 120000 131000
year
2023
老鼠回家路
题目描述
老鼠找食物,但是回家的时候找到最短路
输入是x-y,x是1234其中的一个,代表四个方向,y是向这个方向走的距离
比如:
格式 数字 - 数字
1-2表示,向上走两步
2-3向下走3步
3-1向左走1步
4-2向右走2步
0-0表示找到了
然后返回的时候,找到最短路径
然后要求给他找回头路,把重复的路给去掉
题目首先规定四个方向:1、2、3、4分别代表上下左右
输入序列形式为1-3 3-4 1-4...,前一个数字代表方向,后一个数字代表前进距离,以0-0为结束,结束则代表老鼠找到了食物。
老鼠在碰到死路时会原路返回到分叉路口,探索下一个方向。
需要求解老鼠原路返回的最佳路径,以2-3 4-2...等作为输出。最佳路径的描述是"不走回头路",即没有折返过程即可
输入格式
见题目
输出格式
见题目
输入样例
1-1 3-1 1-1 2-1 4-2 1-2 4-1 1-1 2-1 3-1 1-1 0-0
输出样例
2-3 3-1 2-1
year
2023
字符串距离
题目描述
在信息论汉明码中,存在一个定义;字符串之间的距离,指两个等长字符串进行比较时,存在不同字母的位置的个数,例如01010和01011的距离是1(最后一位不一样),ROSES和roses的距离是5(每一位的大小写都不一样)
输入格式
一个整数n(2<=n<=16),后接n行相同长度的字符串,字符串两两互不相同
输出格式
输出每对字符串两两比较的结果,输出格式如下:
较小的字符串+空格+较大的字符串+空格+两者的距离+换行符
优先输出距离最小的字符串组合,如果有的组合距离相同,则优先输出较小的字符串更小的组合,如果较小的字符串相同,则优先输出较大的字符串更小的组合,如果比较结果多于6对,则只输出前6对
PS:字符串的大小指的是字符串的ASC码的字典序大小
输入样例
7
01010
11011
10101
10011
Roses
roses
cotes
输出样例
10011 11011 1
Roses roses 1
01010 11011 2
10011 10101 2
Roses cotes 2
cotes roses 2
year
2022
模拟编译系统
题目描述
该程序会模拟一个解释运行的编译系统,每次从标准输入中读入一行指令,都要进行对应的操作,该程序中存在四种语句,语句最长200个字符,每个语句占且仅占一行,每行最多一个语句
四种语句分别如下:
1输入语句,格式为"read+空格+<交量序列>+换行符",变量序列是以空分隔的变量名称的组合,变量的名字只可能为单个的小写字母,变量不需要前声明,紧接着下一行,输入若干十进制整数,每个整数和上一行的变量对应赋值
2.赋值语句,格式为"变量+等于符号+表达式+换行符",表达式中包含十进制整数,变量,±*/()这六种计算符号,整个语句不包含空白符
3.输出语句,格式为"print+空格+<变量序列>+换行符",紧接着下一行,输出若干个变量的值,值以浮点数形式输出,保留两位小数,值之间以空格分隔,最后一个值后面不跟空格跟换行符
4.结束语句,格式为"exit+换行符",该语句后直接结束程序运行
测试样例中,所有语句均不包含语法错误,所有变量在使用前均会赋值(不需要考虑输入错误的情况)
输入格式
见题目
输出格式
见题目
输入样例
read a
10
b=20
c=(a+b)/4
print a b c
exit
输出样例
10.00 20.00 7.50
year
2022