coPre测试题目与解析
本文最后更新于:2024年4月22日 晚上
Pre共有三道题,分别考察了MIPS、Verilog和Logisim,考试时间2小时。
以下试题内容均为回忆版,还请见谅。
第一题:supaltitude
题干
阿庄哥(随便起的名字)从某处开始沿着山路骑车。设起点的相对海拔为$0$,从起点到终点一共经过了$n$个记录点,给出该记录点与前一个记录点的相对海拔差,输出整个过程中所处的最高相对海拔值。
输入
- 一个正整数$n$,表示从起点开始总共经过的记录点的个数;
- 一个数组$a[n]$,其中$a[i]$表示第$i$个记录点相对于第$i-1$个检查点的相对海拔差;
- 输入数据保证$0 \le n \le 128$, $-128 \le a[i] \le 128$。
输出
- 一个整数,表示整个过程中所处的最高相对海拔值。
样例1
输入
1 |
|
输出
1 |
|
样例2
输入
1 |
|
输出
1 |
|
分析
首先需要考虑的是,需不需要开辟数组空间?
题目的本质是想要我们求连续子数组的最大和,所以其实只需要每次读入一个数,更新当前的前缀和,并与最大前缀和对比即可,并不需要开辟数组空间。
前缀和:从nums数组第0个数开始累加,到第$i$个位置的累加结果。
清楚题意之后,我们可以尝试写出以下c语言代码:
1 |
|
我们在Pre的MIPS汇编程序设计中已经学习了条件语句和循环语句的写法:
1 |
|
1 |
|
基于以上分析与所学知识,我们便可以完成所需的MIPS程序。
提示:
- 对于MIPS程序设计题,先写出可解决该问题的C语言程序代码,再逐句“翻译”成对应的MIPS指令,是一种值得尝试的选择;
- 编写MIPS代码时可以添加一些空格、缩进、标签、注释等,增强代码的可读性。
解答
1 |
|
第二题:noDescendSequence
题干
“不下降数”表示一个整数的高位数码不会大于低位数码。例如,$1234$、$1223$是“不下降数”,而$1243$不是“不下降数”。
使用Verilog构建一个判断一个4位16进制数输入是否为“不下降数”的电路。
端口定义如下:
信号名 | 方向 | 描述 |
---|---|---|
in[15:0] | I | 接受带判断的数字 |
out | O | 如果是“不下降数”,返回1; 否则,返回0 |
分析
这道题很简单,只需要把in的四个数码分别比较即可。
在完成模块的设计后,最好使用testbench进行测试。
解答
1 |
|
第三题:tetris
忘了题目了,好像是Mealy型自动机,大家全面准备吧:)
coPre测试题目与解析
https://galaxy-jewxw.github.io/2023/09/27/coPre测试题目与解析/