复旦大学计算机考研机试真题
历年复旦大学计算机考研机试真题
复旦大学计算机考研机试真题
树的子结构
题目描述
入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构)
B是A的子结构, 即 A中有出现和B相同的结构和节点值。
输入格式
两行,第一行是树A,第二行是树B。
输出格式
若:B是A的子结构,输出true
否则:输出false。
输入样例
3 4 5 1 2
4 1
输出样例
true
year
2023
serial
0
数的间隙
题目描述
给一个序列a1到an,和一个d。
an数组排序后,后一个数减去前一个数的最大值不小于d。
请问最多能从an中选出多少满足条件的数字。
输入样例
xxxxx
输出样例
xxxx
year
2023
serial
1
高尔夫比赛的森林砍树
题目描述
你被请来给一个要举办高尔夫比赛的树林砍树。树林由一个 m x n
的矩阵表示, 在这个矩阵中:
0
表示障碍,无法触碰1
表示地面,可以行走比 1 大的数
表示有树的单元格,可以行走,数值表示树的高度
每一步,你都可以向上、下、左、右四个方向之一移动一个单位,如果你站的地方有一棵树,那么你可以决定是否要砍倒它。
你需要按照树的高度从低向高砍掉所有的树,每砍过一颗树,该单元格的值变为 1
(即变为地面)。
你将从 (0, 0)
点开始工作,返回你砍完所有树需要走的最小步数。 如果你无法砍完所有的树,返回 -1
。
可以保证的是,没有两棵树的高度是相同的,并且你至少需要砍倒一棵树。
输入格式
第一行两个整数,分别是m和n
接下来有m行,每行n个数,代表矩阵的行。
输出格式
输入样例
3 3
1 2 3
0 0 4
7 6 5
输出样例
6
year
2023
serial
2
层次遍历
题目描述
给定一个二叉搜索树的先序遍历,求其层次遍历。
输入格式
第一行输入n,表示树中有n个节点
接下来一行输入n个数tree[i],表示树的先序遍历。
n<100000
tree[i]各不相同,但不一定为1-n的全排列,且一定可以构成二叉搜索树
输出格式
输出1行n个数,表示层次遍历的结果
输入样例
4
3 1 2 4
输出样例
3 1 4 2
year
2023
serial
2
k小数
题目描述
给定一个行列均有序的二维数组A ,长宽均为n,求A的第K小元素
输出要求
输入格式
每组询问前两个数为n,k,T
接下来2行各4个数(a1,b1,c1,d1)(a2,b2,c2,d2),表示该二维数组
n<=13000
a[x][y]=的整数部分
a1>b1,a2>b2
k<=n*n
输出格式
输出1行,表示询问的结果。
输入样例
4 4 4
1 0 0 0
1 0 0 0
输出样例
16
year
2023
serial
2
最快到达
题目描述
在一条长度为n-1 km的道路上,每1公里有一个路牌,路牌上有一个数字。你现在在第1块路牌的位置,你可以花1分钟前进1公里,也可以花1分钟飞到离你最近的与你当前所在地点路牌数字相同的地方,请问最快多久可以到达道路终点。
输入格式
第一行输入n(n<=1e5)
接下来一行n个整数a[i],代表第1-n块路牌上的数字,-1e15<a[i]<1e15
输出格式
输出一个数,代表最少的时间。
输入样例
5
1 0 -1 0 2
输出样例
3
year
2023
serial
3
最大团队表现值
题目描述
某公司在招聘工程师来组建一个团队。现有 n 个工程师进行应聘,每个应聘工程师有速度和效率两个属性。
求由最多 k 个工程师组建的团队的最大表现值。
团队表现值定义为:一个团队中"所有工程师的速度和"乘以"他们中效率的最小值"。
请你返回该团队的最大团队表现值,由于答案可能很大,请你返回结果对 10^9^ + 7
取余后的结果。
输入格式
第一行:n。表示工程师的人数
第二行:n个正整数。分别表示n个工程师的速度
第三行:n个正整数。分别表示n个工程师的效率
第四行:k。表示最多选择k名工程师
输出格式
最大团队表现值
输入样例
6
2 10 3 1 5 8
5 4 3 9 7 2
2
输出样例
60
year
2022
serial
0
字符串编辑距离
题目描述
问题描述:给定两个字符串A和B,求字符串A至少经过多少步字符操作变成字符串B。
比如eat变成tea。对于第一个字符,e != a,所以要想让这两个字符相等,有三种可以选择的办法
修改字符,将e直接变成a,需要走1步。
插入字符,在e的前面插入a,也需要走1步。
删除字符,将e删除,然后比较后面的与a,也需要走1步。
输入格式
输入字符串A和B(长度小于1000)
输出格式
输出最少经过多少步可以将A变成B
输入样例
horse
ros
输出样例
3
year
2022
serial
1
概率最大的路径
题目描述
给你一个由 n 个节点(下标从 0 开始)组成的无向加权图,该图由一个描述边的列表组成,其中 edges[i] = [a, b] 表示连接节点 a 和 b 的一条无向边,且该边遍历成功的概率为 succProb[i] 。
指定两个节点分别作为起点 start 和终点 end ,请你找出从起点到终点成功概率最大的路径,并返回其成功概率。
如果不存在从 start 到 end 的路径,请 返回 0 。只要答案与标准答案的误差不超过 1e-5 ,就会被视作正确答案。
示例 1:
输入:n = 3, edges = [[0,1],[1,2],[0,2]], succProb = [0.5,0.5,0.2], start = 0, end = 2
输出:0.25000
解释:从起点到终点有两条路径,其中一条的成功概率为 0.2 ,而另一条为 0.5 * 0.5 = 0.25
示例 2:
输入:n = 3, edges = [[0,1],[1,2],[0,2]], succProb = [0.5,0.5,0.3], start = 0, end = 2
输出:0.30000
示例 3:
输入:n = 3, edges = [[0,1]], succProb = [0.5], start = 0, end = 2
输出:0.00000
解释:节点 0 和 节点 2 之间不存在路径
数据范围
2 <= n <= 10^4
0 <= start, end < n
start != end
0 <= a, b < n
a != b
0 <= succProb.length == edges.length <= 2*10^4
0 <= succProb[i] <= 1
输入样例
3
0 1
1 2
0 2
0.5 0.5 0.2
0 2
输出样例
0.25000
year
2022
serial
2
完全二叉树
题目描述
给定一颗二叉树,树的每个节点的值为一个正整数。
如果从根节点到节点 N 的路径上不存在比节点 N 的值大的节点,那么节点N被认为是树上的关键节点。
求树上所有的关键节点的个数。请写出程序,并解释解题思路。
输入样例
3 1 4 3 null 1 5
输出样例
3 1 4 3 null 1 5
year
2021
serial
0
爬楼梯
题目描述
训练场上有一个台阶,总共有 n 级。一个运动员可以跳 1 级,也可以跳 2 级。
求运动员有多少种跳法。请写出程序,并解释解题思路。
输入样例
输出样例
2
year
2021
serial
1
目标和
题目描述
给定一个非负整数序列 x1, x2, ..., xn,可以给每一个整数取负数或者取原值。
求有多少种取法使得这些整数的和等于期望值 E。
请写出程序,并解释解题思路。
输入格式
第一行:非负数序列
第二行:期望E
输出格式
取法的数量
输入样例
1 1 1 1 1
3
输出样例
5
year
2021
serial
2
排队打饭
题目描述
下课了,有 n 位同学陆续赶到⻝堂进⾏排队打饭。
其中第 i 位同学的到达时间为 ai,打饭耗时为 ti,等待时间上限为 bi,即如果其在第 ai+bi秒的时刻仍然没有轮到他开始打饭,那么他将离开打饭队列,另寻吃饭的地⽅。
问每位同学的开始打饭时间,或者指出其提前离开了队伍(如果这样则输出 -1)
输入格式
第⼀⾏⼀个整数 n (1<=n<=10^5),表⽰来打饭的同学数量。
接下来 n ⾏,每⾏三个整数 a[i],t[i],b[i] (1<=a[i],t[i],b[i]<=10^9, 1<=i<=n)
分别表⽰每位同学的到达时间、打饭耗时、等待时间上限。 保证 a[1]<a[2]<...<a[n]
输出格式
每位同学的开始打饭时间
输入样例
4
1 3 3
2 2 2
3 9 1
4 3 2
输出样例
1 4 -1 6
year
2020
serial
0
斗牛
题目描述
给定五个 0~9 范围内的整数 a1, a2, a3, a4, a5。
如果能从五个整数中选出三个并且这三个整数的和为10 的倍数(包括 0),那么这五个整数的权值即为剩下两个没被选出来的整数的和对 10 取余的结果,显然如果有多个三元组满⾜和是 10 的倍数,剩下两个数之和对 10 取余的结果都是相同的;
如果选不出这样三个整数,则这五个整数的权值为 -1。
现在给定 T 组数据,每组数据包含五个 0~9 范围内的整数,分别求这 T 组数据中五个整数的权值。
输入格式
第⼀⾏⼀个整数 T (1<=T<=1000),表⽰数据组数。
接下来 T ⾏,每⾏ 5 个 0~9 的整数,表⽰⼀组数据。
输出格式
输入n个整数,组数据中五个整数的权值
输入样例
4
1 0 0 1 0
1 0 0 8 6
3 4 5 6 7
4 5 6 7 8
输出样例
2
-1
-1
0
year
2020
serial
1
打地鼠
题目描述
给定 n 个整数 a1, a2, ..., an 和⼀个 d,你需要选出若⼲个整数,使得将这些整数从⼩到⼤排好序之后,任意两个相邻的数之差都不⼩于给定的d,问最多能选多少个数出来。
输入格式
第⼀⾏两个整数 n,d (1<=n<=10^5^,0<=d<=10^9^)
分别表⽰整数个数和相邻整数差的下界。
第⼆⾏ n个整数 a1, a2, ..., an (1<=ai<=10^9^, 1<=i<=n)
表⽰给定的 n 个整数。
输出格式
仅⼀⾏⼀个整数,表⽰答案。
输入样例
6 2
1 4 2 8 5 7
输出样例
3
year
2020
serial
2
序列
题目描述
给定⼀个⻓为 n 的序列 A,其中序列中的元素都是 0~9 之间的整数,对于⼀个⻓度同样为 n 整数序列B,定义其权值为 |A_i-B_i| (1<=i<=n) 之和加上 (B_j-B_j+1)^2 (1<=j<n) 之和。
求所有⻓为 n 的整数序列中,权值最⼩的序列的权值是多少。
输入格式
第⼀⾏⼀个整数 n (1<=n<=10^5),表⽰序列 A 的⻓度。
第⼆⾏ n 个整数 a1, a2, ..., an (0<=ai<=9, 1<=i<=n),表⽰序列 A 中的元素。
输出格式
仅⼀⾏⼀个整数,表⽰答案。
输入样例
6
1 4 2 8 5 7
输出样例
11
year
2020
serial
3
二叉搜索树
题目描述
给定⼀个 1~n 的排列 P,即⻓度为 n,且 1~n 中所有数字都恰好出现⼀次的序列。现在按顺序将排列中的元素⼀⼀插⼊到初始为空的⼆叉搜索树中(左小右大),问最后每个节点的⽗亲节点的元素是什么。
特别地,根节点的⽗亲节点元素视为 0。
输入格式
⼀⾏ n 个整数,其中第 i 个整数 ai 表⽰元素 i 对应节点的⽗亲节点的元素。特别地,根节点的⽗亲节 点元素视为 0。
输出格式
⼀⾏ n 个整数,其中第 i 个整数 ai 表⽰元素 i 对应节点的⽗亲节点的元素。特别地,根节点的⽗亲节 点元素视为 0。
输入样例
5
2 3 5 1 4
输出样例
2 0 2 5 3
year
2020
serial
4
日期差值
题目描述
输入日期格式:YYYYMMDD,求与20190205相隔天数
输入样例
20190208
输出样例
3
year
2019
serial
0
最大连续子序列
题目描述
给定一个数字序列A1,A2...An,求i,j(1<=i<=j<=n),使得Ai+...+Aj最大,输出这个最大和。
输入格式
第一行输入一个整数n,表示数列大小
第二行输入n个整数
输出格式
最大和
输入样例
6
-2 11 -4 13 -5 -2
输出样例
20
year
2019
serial
1
有向树形态
题目描述
求N个结点能够组成的二叉树的个数。 1<=n<=20
输入格式
一个整数 N。
输出格式
输出能组成的二叉树的个数。
输入样例
3
输出样例
5
year
2019
serial
2
求众数
题目描述
给定一个长度为 n 的整数序列,请你求出该序列的众数。
众数就是一个序列中出现次数最多的数字。
如果不唯一,则输出小的那个值。
输入格式
第一行输入一个整数 n,表示有 n 个数。
第二行输入n 个整数。
输出格式
输出序列中的众数,如果不唯一,则输出小的那个值。
输入样例
8
10 3 8 8 3 2 2 2
输出样例
2
year
2018
serial
0
集合交并
题目描述
输入两个集合,分别求其交集和并集中元素的个数,每个集合中可能存在相同的元素,而最终的交集和并集中应该不存在。
输入格式
第一行输入两个整数 n,m 表示两个集合中元素的个数。
第二行输入 n 个整数,表示第一个集合中的元素。
第三行输入 m 个整数,表示第二个集合中的元素。
输出格式
输出两个整数以空格分开,表示其交集和并集中元素的个数。
数据范围
1≤n,m≤10^5^,
给定集合元素取值范围 [1,109]。
输入样例
4 5
3 4 7 3
4 6 3 2 6
输出样例
2 5
year
2018
serial
1
骨牌
题目描述
有2*n 的地板,用1*2和 2*1 的骨牌进行铺地板。
问共有多少种情况。结果对 999983 取余,1<=n<=10000
输入格式
输入一个整数n
输出格式
一个整数,表示铺法数量对 999983
取模后的结果
数据范围
1≤n≤10000
输入样例
6
输出样例
13
year
2018
serial
2
求交点
题目描述
求直线交点,输入两个直线上的各两个端点,求其交点,
若无交点或无穷个交点输出一句 Parallel or coincident,输出交点保留两位小数。
输入格式
第一行包含四个整数 x1,y1,x2,y2
表示第一个直线上的两个点坐标。
第二行包含四个整数 x3,y3,x4,y4
表示第二个直线上的两个点坐标。
输出格式
输出两个直线的交点坐标,保留两位小数。
若无交点或无穷个交点输出一句 Parallel or coincident。
数据范围
0≤x[i],y[i]≤10
输入样例
0 0 5 5
0 2 2 0
输出样例
1.00 1.00
year
2018
serial
3
解一元一次方程
题目描述
解方程,给定一个字符串,代表一个一元一次方程。
如果有解求解,输出格式"x=数字",
如果解的个数无穷,输出 "infinite solutions"。
如果没有解输出"no solution",字符串长度不超过 256 。
输入格式
方程
输出格式
解
输入样例
2x+4-3x=x-2
输出样例
x=3
year
2018
serial
4
约数求和
题目描述
输入一个数n,输出前n个数的约数的和。
输入格式
一个整数 n
输出格式
一个整数,表示前 n个数的约数的和
数据范围
1≤n≤10^7^
输入样例
7
输出样例
41
year
2018
serial
5
求中位数
题目描述
中位数定义:一组数据按从小到大的顺序依次排列,处在中间位置的一个数(或最中间两个数据的平均数). 给出一组无序整数,求出中位数,如果求最中间两个数的平均数,向下取整即可(不需要使用浮点数)
输入格式
该程序包含多组测试数据,每一组测试数据的第一行为N,代表该组测试数据包含的数据个数,1<=N<=10000.
接着N行为N个数据的输入,N=0时结束输入
输出格式
各个序列的中位数
输入样例
4
10
30
20
40
3
40
30
50
4
1
2
3
4
0
输出样例
25
40
2
year
2017
serial
0
求解校验码
题目描述
给定一个9位数字的ISBN,求其校验位。
ISBN格式为2-02-033598,校验位的计算方法如下:从左到右依次将各位数字乘10,9,8,......,2,
求出其和S,作模运算得M=S mod 11。
若11-M在1和9之间,校验位即为该数字
若11-M等于10,校验位为X;
11-M等于11,校验位为0。
输出添加校验位的ISBN,如2-02-033598-0。
输入格式
给定一个9位数字的ISBN
输出格式
输出添加校验位的ISBN
输入样例
2-02-033598
输出样例
2-02-033598-0
year
2017
serial
1
无向图
题目描述
一个无向图,顶点为N个,顶点编号为1~N,其中M条边已给定.
现在要从K条备选边中选出若干条,使得整个图连通,且选出的边权值和最小。
输入格式
第一行输入三个整数N(N<100), M, K,
接下来一行为K个整数表示备选边的编号。
然后是是M行,每行三个数字:u,v,d(0<d<10000)表示结点u和结点v的边,权值为d
编号按照输入输入顺序依次为1~M。
输出格式
如果输入有解则输出选出的边的权值和
否则输出-1
输入样例
4 4
1 2 2
1 4 1
2 3 3
3 4 4
输出样例
6
year
2017
serial
2
最大公共子串长度
题目描述
给定两个字符串,求最大公共子串的长度。
输入样例
fdfdfd42543
232fdfdfdjlkj
输出样例
6
year
2016
serial
0
后缀序列
题目描述
给定一个后缀序列,求值,只有加减
输入样例
23+1+
输出样例
6
year
2016
serial
1
哈夫曼编码
题目描述
给定一个字符串,求哈夫曼编码的最短长度。
输入样例
aaaaabbbbcccdde
输出样例
33
year
2016
serial
2
Hanoi塔问题
题目描述
(n阶Hanoi塔问题)假设有三个分别命名为A、B、C的塔座,在塔座A上插有n(n<20)个直径大小各不相同、依小到大编号为1,2,...,n的圆盘。现要求将A轴上的n个圆盘移至塔座C上并仍按同样顺序叠排,圆盘移动时必须遵循下列规则: 1)每次只能移动一个圆盘; 2)圆盘可以插在A、B、C中的任一塔座上; 3)任何时刻都不能将一个较大的圆盘压在较小的圆盘之上。 请通过编程来打印出移动的步骤.
输入格式
只有一组输入数据.输入数据N(;表示在开始时A塔座上的盘子数),当输入0时程序结束.
输出格式
输出移动的步骤.如"A-->C","A-->B"等.每两的步骤之间有三个空格隔开,每输出5个步骤就换行.详细的见Sample Output.
输入样例
5
2
0
输出样例
A-->C A-->B C-->B A-->C B-->A
B-->C A-->C A-->B C-->B C-->A
B-->A C-->B A-->C A-->B C-->B
A-->C B-->A B-->C A-->C B-->A
C-->B C-->A B-->A B-->C A-->C
A-->B C-->B A-->C B-->A B-->C
A-->C
A-->B A-->C B-->C
year
0
serial
0
长方形中的正方形
题目描述
给出长方形的长和宽,每次从长方形里撕去最大的正方形,输出最后能得到多少正方形
输入格式
输入两个整数,n和m,分别表示长方形的长和宽,数在int范围内
输出格式
输出一个整数,表示最后能得到多少正方形
输入样例
3 4
输出样例
4
year
0
serial
1
a与b得到c
题目描述
给出a,b,c(3个整数),判断a,b能否通过±*/得到c,ab可以交换位置,可以输出YES,不可以则输出NO
输入格式
输入3个整数a,b,c,数据都在int范围内
输出格式
判断a,b能否通过±*/得到c,ab可以交换位置,可以输出YES,不可以则输出NO
输入样例
3 8 2
输出样例
NO
year
0
serial
2
最长公共子序列LCS
题目描述
问题描述:输入3个子串, 输出这3个子串的最大公共子串
输入:
abcd acb abc
输出:
ab
输入格式
如题
输出格式
如题
输入样例
abcd
acb
abc
输出样例
ab
year
0
serial
3
求最大连续公共字串长度
题目描述
题目描述:给定两个字符串,求最大公共字串的长度,长度小于1000
分为两种问题:要求计算连续最长字串的长度
如下按照寻找连续的字串理解
输入:
1111hello2222
1133hello444
输出:
5
输入格式
如题
输出格式
如题
输入样例
1111hello2222
1133hello444
输出样例
5
year
0
serial
4