2025年同济大学计算机保研机试真题
本文整理同济大学计算机保研机试真题,并提供详细解析与代码实现,帮助同学们了解保研机试的难度与题型分布
字母列位置输出
题目描述
给定一个仅包含小写英文字母的字符串(长度≥1),已知英文字母与“列号”的对应规则为: $a$ 对应第1列、 $b$ 对应第2列、 $c$ 对应第3列…… $z$ 对应第26列。
请遍历字符串中的每个字母,按照“一个字母一行”的规则输出该字母对应的列号。
输入格式
输入数据为单个字符串,无空格、无数字及特殊字符,仅包含 $a$ - $z$ 的小写字母。
输出格式
遍历字符串的每个字符,每个字符对应一行输出,每行内容为该字符对应的列号(整数)。
输出顺序与字符串中字符的顺序一致(即第一个字符对应第一行输出,第二个字符对应第二行输出,以此类推)。
数据范围
字符串长度范围:$1 \leq$ 字符串长度 $\leq 100$。
输入样例
cat
输出样例
3
1
20
高精度二进制小数转十进制
题目描述
给定一个合法的二进制小数(格式为 “整数部分。小数部分”),需将其转换为十进制数并输出。
由于二进制小数的小数部分长度可能超过 200 位(远超 long double 的精度范围,直接使用浮点数会导致严重精度丢失),因此必须通过字符串逐位解析结合高精度计算实现转换,确保结果准确性。
输入格式
-
输入为单个字符串,仅包含字符
'0'、'1'和'.',代表合法的二进制小数; -
字符串仅含 1 个小数点,且小数点前后均至少有 1 位字符(排除 “0.”、“1.”、“.0”、“.1” 等无效格式);
-
整数部分仅由
'0'或'1'组成(如 “0”、“1”、“101”、“1110” 等),小数部分仅由'0'或'1'组成; -
小数部分长度范围:$1 \leq$ 小数部分长度 $\leq 200$(确保超过常规浮点数精度,强制要求高精度处理);
-
无需处理无效输入(如含非 0/1 字符、多个小数点等)。
输出格式
-
有限小数处理:若转换结果为有限小数(二进制小数有限的充要条件是:小数部分无无限循环的 1,即分母仅含 2 的因子),需精确输出所有有效数字,末尾无多余 0,小数点后无数字时不输出小数点(例:二进制 “1.000” 输出 “1”,而非 “1.0”);
-
无限小数处理:若转换结果为无限小数(如二进制 “0.010101...” 对应十进制 $1/3$),则输出保留小数点后 15 位,第 16 位数字四舍五入(若第 16 位 $\ge 5$,则第 15 位加 1,依次进位,如 0.3333333333333334→0.333333333333333);
-
输出结果禁止使用科学计数法,仅以 “整数” 或 “整数。小数” 形式呈现。
数据范围
- 小数部分长度 $1 \leq$ 长度 $\leq 200$
输入样例1
0.1101
输出样例1
0.8125
输入样例2
10.101
输出样例2
2.625
输入样例3
0.1101110110
输出样例3
0.865234375
加法运算符重载
题目描述
定义一个模板矩阵类 $Matrix
需为该模板类重载加法运算符 +,使不同数据类型、不同固定维度的矩阵支持合法的加法运算,具体规则如下:
-
运算前提:两个相加的矩阵必须为同类型、同维度(即 $T$ 相同、$ROW$ 相同、$COL$ 相同),否则视为非法运算,需提示 “维度或类型不匹配,无法相加”;
-
不同类型的加法规则:
-
当 $T = int$ 且 $ROW=2$、$COL=3$ 时(即 $Matrix
$):加法为对应位置元素的整数相加(如矩阵 $A$ 的 $(i,j)$ 元素 + 矩阵 $B$ 的 $(i,j)$ 元素,结果作为新矩阵的 $(i,j)$ 元素); -
当 $T = double$ 且 $ROW=3$、$COL=2$ 时(即 $Matrix
$):加法为对应位置元素的浮点数相加,结果保留 6 位小数(若末尾为 0 可省略,如 $2.500000$ 输出 $2.5$); -
当 $T = string$ 且 $ROW=3$、$COL=3$ 时(即 $Matrix
$):加法为对应位置字符串的拼接(如矩阵 $A$ 的 $(i,j)$ 字符串 + 矩阵 $B$ 的 $(i,j)$ 字符串,结果作为新矩阵的 $(i,j)$ 元素); -
需实现矩阵的输入函数(从标准输入读取矩阵元素)和输出函数(将矩阵元素按行输出,每行元素用空格分隔,行末无多余空格),支持上述三种特定类型矩阵的输入输出。
输入格式
输入分为三个独立的测试用例,分别对应 $Matrix
测试用例 1:int 类型矩阵(2 行 3 列)
-
第 1-2 行:输入第一个 $Matrix
$ 的元素,每行 3 个整数,整数范围 [-1000, 1000],元素间用空格分隔; -
第 3-4 行:输入第二个 $Matrix
$ 的元素,格式与第一个矩阵一致。
测试用例 2:double 类型矩阵(3 行 2 列)
-
第 1-3 行:输入第一个 $Matrix
$ 的元素,每行 2 个浮点数(可表示为整数形式如 5 或小数形式如 5.23、-3.1415),数值范围 [-10000.0, 10000.0],元素间用空格分隔; -
第 4-6 行:输入第二个 $Matrix
$ 的元素,格式与第一个矩阵一致。
测试用例 3:string 类型矩阵(3 行 3 列)
-
第 1-3 行:输入第一个 $Matrix
$ 的元素,每行 3 个字符串(字符串不含空格,长度 [1, 20]),元素间用空格分隔; -
第 4-6 行:输入第二个 $Matrix
$ 的元素,格式与第一个矩阵一致。
输出格式
针对每个测试用例,输出结果如下:
-
若矩阵类型或维度不匹配(题目保证测试用例输入合法,此情况仅为代码健壮性要求,实际输入中不出现),输出
维度或类型不匹配,无法相加 -
若运算合法,输出加法结果矩阵,具体格式:
-
$int$ 矩阵:每行 3 个整数,元素间用空格分隔,行末无多余空格;
-
$double$ 矩阵:每行 2 个浮点数,保留 6 位有效小数(若小数部分全为 0,仅输出整数部分,如 3.000000 输出 3;若小数部分非全 0,去除末尾多余的 0,如 2.500000 输出 2.5,1.234000 输出 1.234);
-
$string$ 矩阵:每行 3 个拼接后的字符串,元素间用空格分隔,行末无多余空格。
三个测试用例的输出顺序与输入顺序一致,每个测试用例输出后空一行(最后一个测试用例输出后无需空行)。
数据范围
-
$int$ 元素范围 [-1000, 1000]
-
$double$ 元素范围 [-10000.0, 10000.0]
-
$string$ 长度 [1, 20]
输入样例1
1 2 3
4 5 6
7 8 9
10 11 12
输出样例1
8 10 12
14 16 18
输入样例2
1.2 3.4
5.6 7.8
9.0 10.11
12.34 13.56
14.78 15.90
16.12 17.34
输出样例2
13.54 16.96
20.38 23.7
25.12 27.44
输入样例3
a b c
d e f
g h i
1 2 3
4 5 6
7 8 9
输出样例3
a1 b2 c3
d4 e5 f6
g7 h8 i9