# P2 课上测试游记
通过阅读本文,您可以大致了解 2021 年秋季北航计算机组成课程 P2 课上测试的题目内容、难度和解题思路
P2 课上测试的主要内容是利用 MIPS 汇编语言翻译 C 语言程序
题目每年都会发生变化,题意描述大致清晰,但是可能与原题有一定差异
P2 课上测试非常简单,想要通过与 C 语言基础没有任何联系,只需要掌握翻译 C 语言代码的技巧,手速再快一点,1.5h 之内 AK 还是挺容易的
而且本次考试时间是 2.5h... 难度虚高了
# T1 删数问题
题目已经给出了 C 语言代码,否则应该还是一道挺有思考难度的题目
给出一个 位数,要从中删去 个数字,要求得到新数字 位数 最小
题目输入 、 和 ,要求输出
题目来源:洛谷 P1106 删数问题,链接甩在这里了 P1106 删数问题 - 洛谷,详细解答可以参考原题解
输入输出样例
输入 #1
175438
4
输出 #1
13
话说连输入输出都没变...
正确做法是贪心,每次从最高位开始寻找一个下降区间,删去下降区间的第一个数字,则可以证明这样的做法留下的数字最小
但是根本不用去思考正解,因为按照题目要求翻译就行了...
# T2 分解求和
题目稍显简单,根本找不到原题(毕竟数据范围只有,然而我第一次 TLE 了...)
这一题其实比 T1 容易
给定一个数,按照字典序输出它所有可能的加法拆分(满足交换律算一种)
输入输出样例
输入 #1
5
输出 #1
1+1+1+1+1
1+1+1+2
1+1+3
1+2+2
1+4
2+3
简单 DFS,暴力出奇迹
还有 C 代码,懒省事可以照着直接翻译
# T3 双关键字排序
听说前几年考过快排,考试之前我还手写练习了归并排序,然而这次没考,考了冒泡排序...
给定 组数据,每个数据由 和 两个数组成,对 组数据进行排序,其中首先按照 的大小从小到大排序, 相同按照 从小到大排序
输入数据包括 行,第 1 行是一个整数,表示数据组数,从第 2 行到第 行,每行一个整数,依次表示
输出应当包括 行,每行 2 个整数,用空格隔开,分别是排完序后的a_{i_1},b_
为了降低难度,甚至题面给出了冒泡排序的 C 语言代码
我用了封装好的数组和输入输出宏,但是貌似过度封装了,所以指令数爆了,不用宏了之后就过了...
思路就是冒泡直接翻译,并没有啥
# T4 调试题:回文串
回文串其实是课下题,但是这个选择我又错了,但是我不知道为啥读一个字符用 4 位还是对的...
别的错误很好找,一个是数组最大下标是,另一个是跳转之后会继续执行下面的指令,所以输出 Right
之后会接着输出 Wrong
...
# 提答
助教提问,你不会也会让你过...... 主要内容包括且不限于
- 各种寄存器
$fp
、$k0
、$k1
、$sp
等等... Mars
基本操作- 代码思路