P1课上题目回忆和思路分享[BUAA-CO]
Q1 vector a和vector b每位不同
a,b都是32位二进制数,a从左往右读,b从右往左读,判断a和b不同的位数。
解题思路:
一道简单的组合逻辑问题
1 | module different ( |
Q2 奇偶交替数列
一个数列由01组成,连续的0或者1的个数分别为奇偶,则符合要求,如001110000111
符合奇偶交替数列,0011100001110
不符合。每个时钟上升沿读入number,如果是奇偶交替数列,则check为1,否则为0。res_n为异步复位信号,低电平有效。
解题思路
检测输入信号的奇偶交替,并输出一个 check
信号。 记录 1
和 0
的长度,并计算二者长度的差值。如果差值是偶数,则 check
输出为 0
,否则为 1
。
伪代码
1 | module alternate ( |
Q3 序列匹配
题目描述
{key1:value1, key2:value2, ···,}
为符合要求的序列集合,其中key
只由大小写字母和数字组成,且不能以数字开头,value
由数字组成,key
和value
的长度大于等于1。
输入格式为xxxx{xxxx:xxxx,···,xxxx:xxxx}xxxx,其中xxxx为任意字符且不包含{
、:
、,
、}
,{
、:
、,
、}
之间的空格不影响判断序列符合要求。
每个时钟上升沿读取一个字符chr
;rst
为异步复位信号,高电平有效
输出八位each和total,分别表示所在集合中的符合要求的序列个数和单个集合中最多符合要求的序列个数。注意,当读到}
时,将把each清零,而将更新total的值。(回忆版,大致是这样)
状态转移设计思路
S | chr | S’ | 说明 |
---|---|---|---|
0 | { |
1 | 进入当前集合 |
1 | other |
2 | 该序列不符合要求 |
1 | key |
3 | 用cnt 记录key的长度 |
2 | , |
1 | 读取下一个序列 |
3 | : |
4 | 读到: ,进入value |
4 | value |
4 | 读取value,用cnt 记录value的长度 |
4 | other |
2 | 该序列不符合要求 |
4 | , |
1 | 符合要求,each+1 |
4 | } |
0 | 集合结束,each清零,total取较大值 |
空格出现位置的状态转移说明
在读取key或value时,若cnt为0,说明空格出现在key或value之前,不影响判断,保持原状态,若cnt大于0,说明空格出现在key或value之后,此时将变量space置1,继续读取,如果chr仍是key或value,说明不符合要求,将进入状态2。
以上是本人的解题过程,但第三题bug并没有解决,可以帮我de一下bug 仅供参考。