北航计组-P2课上
通过阅读本文,你可以大致了解BUAA 2024秋季 P2课上测试的相关内容
本次主要考察MIPS汇编,第一题很easy,二三题都给了C代码,直接翻译即可。
题目每年都会发生变化,题面仅靠回忆,题意描述可能与原题有一定差异
P2_Q1(Mooncake)
大意
中秋之际,小班长为同学们搬月饼。小班 N 个人,最少搬 L 个月饼, 最多搬 R 个月饼。搬来月饼后,每人拿一个,直到剩下的数量 < N,并将剩下的月饼还回去。要实现每个人拿到尽可能多的月饼,并减少还回去的负担,请你计算拿多少个月饼 (用K表示)合适,输出每个人拿完剩下的月饼数。
思路
纯数学题,读懂题意后,直接用 R / N,再将结果乘 N ,结果用 x 表示,那么此时 x 就是保证每个人拿到尽可能多的月饼的总月饼数,例如:n = 10, R = 36,则x=30。此时便得到了理想情况下拿的月饼数K,但是有一个最小值 L 限制,并注意要输出同学们拿剩下的月饼数,而不是K,故直接输出 x < L ? L-x : 0。然后翻译。
P2_Q2
大意
利用欧拉筛判断一个输入的数n是否为质数。大佬们说代码给的是欧式筛,我不太懂(逃)😭
思路
没有思路,对着C代码翻译即可,也没有函数,无需维护变量,细心点,问题不大😄
P3_Q3
大意
这道题题面很长,有点麻烦,我没看,既然给了C代码,直接肉编就好了 😁
听别人说是输出在一个有向图中从给定出发点出发可到达的出度为0的点的个数,假如出发点出度为0则直接输出0
思路
直接对着肉编,然后可以封装几个常用的函数为宏,比如getInt
putInt
getIndex
exit
……(这几个宏很常用,甚至可以开考前敲上去)使用起来更加方便,也利于整体代码的美观与调试,值得一提的是,尽量避免在宏中使用寄存器,以此来避免可能的麻烦,除非迫不得已(如$a0, $v0等),如果使用了寄存器,需注意上下文有无对寄存器值的维护或者压根这个寄存器就是随手用随手赋值的(这样并不被提倡)。
对于本题,每次递归前后,维护好 $ra
寄存器以及u
i
的值即可,建议编写、调用宏push
pop
结语
值得一提的是,本次Q3来自我们亲爱的助教 zygg ,上次上机后我还问过他谁出题这个事来着(未经)😆,他跟我说你下次上机就能初见端倪了。
P2之后就是P3——单周期CPU的logisim实现了,加油!