在本练习中,我应该编写一个函数,它接收一个整数列表作为参数,并给出一个矩阵或列表列表.制作矩阵的要点是整数表示矩阵True每列中的s 数.例如
[2,4,1]
Run Code Online (Sandbox Code Playgroud)
必须翻译成:
系统中的哪个表示为列表列表:
[ [0,1,0], [0,1,0], [1,1,0], [1,1,1] ]
Run Code Online (Sandbox Code Playgroud)
由于按列操作矩阵(列表列表)并不容易,我使用了一个技巧并将矩阵向左旋转90度,transpose这使得矩阵如下所示:
然后我开发了以下算法来解决问题:
maximum xs(每个列表的长度等于列表中的最大元素)True在第一个元素确定的列表中放入这么多.False 我试图实现两个解决方案,但每个解决方案都有一个我无法解决的问题:
这个适用于第一个元素就好了,但我不知道如何将它应用于输入列表的所有元素
listToMatrix x = (replicate ((maximum x) - (head x)) False) ++ (replicate (head x) True)`
Run Code Online (Sandbox Code Playgroud)这适用于所有元素,但不能保持内部列表的长度,因此列表具有不同的长度.
listToMatrix lst@(x:xs) = ((replicate ((maximum lst) - x) False) ++ (replicate x True)) : listToMatrix xs`
Run Code Online (Sandbox Code Playgroud)问题1:如何使这些功能在最小的变化下工作?
问题2:更优雅和紧凑的解决方案?
PS我在矩阵中使用了1和0来使它们更具可读性,但实际上它们是真的和假的
mult指令可以将两个 32 位整数相乘,从而得到 64 位结果。结果的高 32 位 (32 - 63) 保存在 Hi 中,低位 (0 - 31) 保存在 Lo 中。在乘法之后,我可以使用mfhi并将mflo结果移动到寄存器。但是显然不可能把64位的数写到32位的寄存器中。如何将结果存储回寄存器并使用它?我应该将每个部分保存在单独的寄存器中并将它们连接起来吗?