BUAA-CO-p1-课上

BUAA-CO-p1-课上

T1: 寻找不同的数

输入32位二进制AB,数A按照从左到右的顺序,数B按照从右到左的顺序,寻找A[x] != B[y]的个数

似乎每年第一题都是一个类似的组合逻辑,都要使用for循环,所以大家一定要掌握for的使用方法

然后,再来个reg[5:0] cnt就好啦

1
2
3
4
5
6
integer i = 0;
always @ (*) begin
for (i = 0; i < 32; i = i + 1) begin
// ...
end
end

T2: 奇偶串

输入一串01交替的串,判断这串数是否满足0与1的个数是奇偶交替的。例如,0001101111,先出现3个0,后2个1,后1个0,后4个1,满足条件,但00011001100不满足条件。只有单种数的串,如00或111不满足“奇偶交替”。

这题跟23年涂色那道题出奇的相似,幸亏考试前看了一眼,掌握了一种非状态转移的方法,否则必然要寄

由于只要求相邻两串的个数不同奇偶,因此只需要定义2个寄存器precntcnt,分别存储上一个数字串的长度和正在读入这个数字的长度,另外需要prenum记录组成上一串的数字是0还是1(用于判断输入的数字是否发生了变化),err记录之前有没有发生过同奇偶的情况

那么总的来说可以分成2种情况,当前输入的数与上一个数一致,即没换数,或换数了,即要开始下一个数字串。没换,cnt++;换了,考察precntcnt是否同奇偶,同时要确认precnt != 0,如果同奇偶了,那么这个串再也不可能正确,因此将err置1,否则,我们要将precnt置为cntcnt0pnum置为当前读入的数,用非阻塞赋值就可以完成。

感兴趣的同学可以去看看23届T2,这里粘个链接。2023P1 上机思路分享

T3: 键值对个数

做完T2还有一个多小时,以为这把稳了,结果T3 debug根本de不出来,就这样做了两题然后润了。由于没做出来,所以题也没背下来,但是有一点我记得:这就是一个标准的状态机,只不过特判条件比较多,是一个“枝枝叉叉比较多”的状态机
(也是de不出来bug的原因)


上机还是挺难的,千万别觉得课下切瓜砍菜,课上就也能切瓜砍菜,大家全面准备吧(

作者

OWPETER

发布于

2024-10-15

更新于

2024-12-02

许可协议

评论