2025年吉林大学计算机保研机试真题
本文整理吉林大学计算机保研机试真题,并提供详细解析与代码实现,帮助同学们了解保研机试的难度与题型分布
搬水果
题目描述
在一个果园里,小明已经将所有的水果打了下来,并按水果的不同种类分成了若干堆,小明决定把所有的水果合成一堆。
每一次合并,小明可以把两堆水果合并到一起,消耗的体力等于两堆水果的重量之和。
当然经过 $n - 1$ 次合并之后,就变成一堆了。
小明在合并水果时总共消耗的体力等于每次合并所耗体力之和。
假定每个水果重量都为 $1$,并且已知水果的种类数和每种水果的数目,你的任务是设计出合并的次序方案,使小明耗费的体力最少,并输出这个最小的体力耗费。
例如有 $3$ 种水果,数目依次为 $1$,$2$,$9$。
可以先将 $1$,$2$ 堆合并,新堆数目为 $3$,耗费体力为 $3$。
然后将新堆与原先的第三堆合并得到新的堆,耗费体力为 $12$。
所以小明总共耗费体力 $= 3 + 12 = 15$,可以证明 $15$ 为最小的体力耗费值。
输入格式
每组数据输入包括两行,第一行是一个整数 $n$ $(1 \leq n \leq 10000)$,表示水果的种类数,如果 $n$ 等于 $0$ 表示输入结束,且不用处理。
第二行包含 $n$ 个整数,用空格分隔,第 $i$ 个整数 $(1 \leq a_i \leq 1000)$ 是第 $i$ 种水果的数目。
输出格式
对于每组输入,输出一个整数并换行,这个值也就是最小的体力耗费值。
输入数据保证这个值小于 $2^{31}$。
输入样例
3
9 1 2
0
输出样例
15
平方因子
题目描述
给定一个数 $n$,判定它是否有一个不为 $1$ 的完全平方数因子。
也就是说,是否存在某个 $k$,$k > 1$,使得 $k^2$ 能够整除 $n$。
输入格式
每行一个整数 $n$,$1 < n < 10000$。
输出格式
对于每一个输入的整数,在单独的一行输出结果。
如果有不为 $1$ 的完全平方数因子,则输出 Yes,否则输出 No。
请注意大小写。
输入样例
15
输出样例
No
三角形的边
题目描述
给定三个已知长度的边,确定是否能够构成一个三角形。
这是一个简单的几何问题。
我们都知道,这要求两边之和大于第三边。
实际上,并不需要检验所有三种可能,只需要计算最短的两个边长之和是否大于最大的那个就可以了。
这次的问题就是:给出三个正整数,计算最小的数加上次小的数与最大的数之差。
输入格式
每一行包括三个数据 $a$, $b$, $c$,并且都是正整数,均小于 $10000$。
输出格式
对于输入的每一行,在单独一行内输出结果 $s$。
$s = \min(a, b, c) + \text{mid}(a, b, c) - \max(a, b, c)$。
上式中,$\min$ 为最小值,$\text{mid}$ 为中间值,$\max$ 为最大值。
输入样例
1 2 3
输出样例
0
怪异的洗牌
题目描述
对于一副扑克牌,我们有多种不同的洗牌方式。
一种方法是从中间某个位置分成两半,然后相交换,我们称之为移位 $shift$。
比如原来的次序是 $1$ $2$ $3$ $4$ $5$ $6$,从第 $4$ 个位置交换,结果就是 $5$ $6$ $1$ $2$ $3$ $4$。
这个方式其实就是数组的循环移位,为了多次进行这个操作,必须使用一种尽可能快的方法来编程实现。
在本题目中,还引入另外一种洗牌方式,就是把前一半(如果总数是奇数,就是 $(n-1)/2$)牌翻转过来,这种操作称之为翻转 $flip$。
在前面 $shift$ 操作的结果上进行 $flip$,结果就是 $1$ $6$ $5$ $2$ $3$ $4$。
当然,如果是实际的扑克牌,直接翻转会造成正反面混在一起的,我们就不管那么多了。
给定 $n$ 张牌,初始次序为从 $1$ 到 $n$,经过若干次的 $shift$ 和 $flip$ 操作后,结果会是什么样?
输入格式
输入包括多组测试数据,每组数据的第一行包括两个数 $n$ 和 $k$。
$n$ 表示牌的数目,$1 < n < 1000$,$k$ 表示下面要进行的操作数量。
随后的 $k$ 行,每行一个整数 $x$,$1 \leq x \leq n$,表示从第几个位置开始移位。
在每一次 $shift$ 操作后都接一个 $flip$ 操作。
输出格式
对于输入的每组数据,计算经过给定的 $k$ 次 $shift$ 和 $flip$ 操作后,各个位置的数值。
并按次序在一行上输出所有牌张的值,每个数值(不包括最后一个)后面有一个空格。
输入样例
6 1
4
输出样例
1 6 5 2 3 4