2025年复旦大学计算机考研复试机试真题解析
以下内容整理了近年来复旦大学计算机专业研究生复试中的上机考试题目,涵盖多个典型算法与数据结构应用场景。所有题目均来自真实考情回顾,适合备考学生进行针对性训练。
BMI指数分类判定 - 2025年真题
问题说明:
BMI(Body Mass Index,身体质量指数)是评估个体体重是否处于健康范围的重要参考指标。给定一个人的身高(单位:米)和体重(单位:公斤),需先计算其BMI值,并根据预设标准判断所属体型类别。
计算公式:
$$
BMI = \frac{体重(kg)}{身高^2(m^2)}
$$
分类依据如下:
- Thin(偏瘦): $ BMI < 18.5 $
- Normal(正常): $ 18.5 \leq BMI < 24 $
- Overweight(超重): $ 24 \leq BMI < 28 $
- Fat(肥胖): $ BMI \geq 28 $
输入格式:
两个浮点数,分别表示体重(kg)与身高(m),以空格分隔。
输出格式:
输出对应的体型分类名称(Thin / Normal / Overweight / Fat)。
ThinNormalOverweightFat
样例输入:
70 1.75
样例输出:
Normal
构造回文串的最少插入操作 - 2025年真题
题目描述:
给定一个字符串 $ s $,每次操作可以在任意位置插入一个字符。目标是通过尽可能少的插入次数,将原字符串变为回文串。
要求求出:
- 最少需要插入的字符数量;
- 构造出最终的回文字符串。
输入格式:
一行字符串 $ s $,长度在 [1, 500] 范围内。
输出格式:
第一行:最少插入字符的数量。
第二行:生成的回文串。
示例输入:
abac
示例输出:
1
cabac
高尔夫比赛中的森林砍树问题 - 2023年真题
背景设定:
一片森林准备举办高尔夫赛事,你需要清除其中所有树木。森林用一个 $ m \times n $ 的矩阵表示,每个单元格含义如下:
- 0:障碍物,不可通行;
- 1:地面,可自由行走;
- >1 的整数:该位置有树,数值代表树的高度,也可行走。
规则说明:
- 每次可向上下左右移动一步;
- 当前所在位置若有树,可以选择将其砍倒,之后该格变为地面(值为1);
- 必须按照树高从低到高的顺序依次砍伐;
- 初始位置为左上角坐标 (0, 0);
- 若无法完成全部砍伐任务,则返回 -1。
保证:所有树高度互不相同,且至少存在一棵树需要砍伐。
输入格式:
首行输入两个整数 $ m $ 和 $ n $,表示矩阵维度;
接下来 $ m $ 行,每行包含 $ n $ 个整数,表示地图信息。
输出格式:
输出完成所有砍树任务所需的最小步数。
输入示例:
3 3
1 2 3
0 0 4
7 6 5
输出示例:
6
最快抵达终点路径规划 - 2023年真题
问题简述:
有一条长度为 $ n-1 $ 公里的道路,沿途设有 $ n $ 块路牌,每公里一块。你起始于第1块路牌处,目标是尽快到达最后一块(即终点)。
允许的操作:
- 步行前进1公里,耗时1分钟;
- 使用“瞬移”技能跳转至最近的一块数字相同的路牌,同样耗时1分钟。
注意:“最近”指距离当前位置最近的同数字路牌,若前后都有,则选择较近者;若等距,可任选其一。
输入格式:
第一行为整数 $ n $($ n \leq 1e5 $);
第二行为 $ n $ 个整数 $ a[i] $,表示各路牌上的数字,取值范围 $(-1e^{15}, 1e^{15})$。
输出格式:
输出到达终点所需的最短时间(单位:分钟)。
样例输入:
5
1 0 -1 0 2
样例输出:
3
最大成功概率路径搜索 - 2022年真题
题目描述:
给定一个含有 $ n $ 个节点的无向加权图(节点编号从0开始),边由数组 $ edges $ 描述,其中每条边 $ edges[i] = [a, b] $ 表示连接节点 $ a $ 与 $ b $,其成功通过的概率为 $ succProb[i] $。
现指定起点 $ 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.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
- 0 ≤ start, end < n
- start ≠ end
- 0 ≤ a, b < n
- a ≠ b
- 0 ≤ succProb.length == edges.length ≤ 2×10
- 0 ≤ succProb[i] ≤ 1
输入样例:
3
0 1
1 2
0 2
0.5 0.5 0.2
0 2
输出样例:
0.25000
目标和 - 2021
题目描述:
给定一个非负整数序列 x, x, …, x。对每个整数可以选择将其变为负数或保持原值。要求计算有多少种不同的选择方式,使得最终所有数的总和等于指定的目标值 E。
请编写程序并说明解题思路。
输入格式:
第一行:非负整数序列
第二行:期望值 E
输出格式:
取法的总数
输入样例:
1 1 1 1 1
3
输出样例:
5
打地鼠 - 2020
题目描述:
给定 n 个整数 a, a, …, a 和一个整数 d。需要从中选出若干个数,并将它们按从小到大的顺序排列,使得任意两个相邻数之间的差值不小于给定的 d。求最多可以选出多少个数。
输入格式:
第一行包含两个整数 n 和 d(1 ≤ n ≤ 10,0 ≤ d ≤ 10),分别表示整数的个数和相邻元素差值的下限。
第二行包含 n 个整数 a, a, …, a(1 ≤ a ≤ 10,1 ≤ i ≤ n),表示给定的整数序列。
输出格式:
输出一个整数,表示最多可选的数字个数。
输入样例:
6 2
1 4 2 8 5 7
输出样例:
3
日期差值 - 2019
题目描述:
输入日期格式为 YYYYMMDD,要求计算该日期与 20190205 之间的天数差。
输入样例:
20190208
输出样例:
3
求众数 - 2018
题目描述:
给定一个长度为 n 的整数序列,找出其中出现次数最多的数字,即众数。如果存在多个众数,输出数值最小的那个。
输入格式:
第一行输入一个整数 n,表示序列中元素的数量。
第二行输入 n 个整数,表示具体的序列内容。
输出格式:
输出该序列的众数;若不唯一,则输出其中最小的值。
输入样例:
8
10 3 8 8 3 2 2 2
输出样例:
2
求交点 - 2018
题目描述:
给定两条直线,每条直线由其上的两个端点确定。要求计算这两条直线的交点坐标。若两直线平行(无交点)或重合(无穷多个交点),则输出一句提示信息。
交点坐标的输出需保留两位小数。
输入格式:
第一行包含四个整数 x1, y1, x2, y2,表示第一条直线上两点的坐标。
第二行包含四个整数 x3, y3, x4, y4,表示第二条直线上两点的坐标。
输出格式:
输出两条直线的交点坐标(保留两位小数)。
若无交点或有无穷多个交点,则输出一句:
Parallel or coincident0 ≤ x[i], y[i] ≤ 10
输出样例
1.00 1.00
输入样例
0 0 5 5
0 2 2 0
求中位数-2017
题目描述
中位数的定义是:将一组数据按照从小到大的顺序排列后,位于中间位置的数值。若数据个数为奇数,则中位数为正中间的那个数;若为偶数,则取最中间两个数的平均值,并对结果进行向下取整(无需使用浮点数运算)。
现给出若干组无序的整数序列,要求计算每组数据的中位数。
输入格式
本程序处理多组测试数据。每组数据第一行为一个整数 N,表示该组数据包含的数字个数,其中 1 ≤ N ≤ 10000。
接下来 N 行,每行输入一个整数。
当 N = 0 时,表示输入结束,程序终止。
输出格式
对于每一组数据,输出其对应的中位数。
输入样例
4
10
30
20
40
3
40
30
50
4
1
2
3
4
0
输出样例
25
40
2
最大公共子串长度-2016
题目描述
给定两个字符串,求它们之间最长的公共子串的长度。公共子串指的是在两个字符串中都连续出现的相同字符序列。
输入样例
fdfdfd42543
232fdfdfdjlkj
输出样例
6
Hanoi塔问题-0
题目描述
设有三根塔柱,分别标记为 A、B 和 C。初始时,在塔柱 A 上从上到下按直径从小到大叠放着 n 个编号为 1 到 n 的圆盘(n < 20)。目标是将所有圆盘移动至塔柱 C 上,并保持原有的叠放顺序。
移动过程中需遵守以下规则:
1. 每次仅能移动一个圆盘;
2. 圆盘可放置于 A、B 或 C 中任意一根塔柱上;
3. 任何时候都不能将较大的圆盘置于较小的圆盘之上。
请编写程序,输出完成移动的所有步骤。
输入格式
仅一组输入数据,输入整数 N,表示塔柱 A 上初始的圆盘数量。
当输入为 0 时,程序结束运行。
输出格式
按顺序输出每一步移动操作,格式如“A-->C”或“A-->B”。
每两个步骤之间用三个空格分隔,每输出 5 个步骤后换行。具体格式参考样例输出。
输入样例
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
最长公共子序列LCS-0
题目描述
给定三个字符串,求这三个字符串的最长公共子序列(LCS)。公共子序列是指在所有字符串中都以相同顺序出现但不必连续的字符序列。
示例输入
abcd
acb
abc
示例输出
ab
输入格式
输入共三行,每行为一个字符串。
输出格式
输出这三个字符串的最长公共子序列。
输入样例
abcd
acb
abc
输出样例
ab

雷达卡


京公网安备 11010802022788号







