Algorithm 打开位计数器

Algorithm 打开位计数器,algorithm,language-agnostic,counter,bit,black-box,Algorithm,Language Agnostic,Counter,Bit,Black Box,假设我有一个黑盒子,有3个输入(每个输入1位)和2个输出位。 黑盒统计打开的输入位的数量。 仅使用此类黑匣子,需要实现输入中开启位的计数器,该计数器有7位。实现应使用尽可能少的黑匣子 //这是一个面试问题你在做一个二进制加法器。试试这个… 两个黑框用于输入,剩余一个输入: 7 6 5 4 3 2 1 | | | | | | | ------- ------- | | | | | | | H L | |

假设我有一个黑盒子,有3个输入(每个输入1位)和2个输出位。 黑盒统计打开的输入位的数量。 仅使用此类黑匣子,需要实现输入中开启位的计数器,该计数器有7位。实现应使用尽可能少的黑匣子


//这是一个面试问题

你在做一个二进制加法器。试试这个…
两个黑框用于输入,剩余一个输入:

 7 6 5      4 3 2      1
 | | |      | | |      | 
-------    -------     |
|     |    |     |     |
| H L |    | H L |     |
-------    -------     |
  | |        | |       |
将两个低输出和剩余输入(1)输入另一个黑匣子:

            L L 1
            | | |
           -------
           |     |
           | C L |
           -------
             | |
 H H C   L
 | | |   |
-------  |
|     |  |
| H M |  |
-------  |
  | |    |
此黑盒的低输出将是结果的低位。高输出是进位。将该进位与前两个黑匣子的高位一起送入第四个黑匣子:

            L L 1
            | | |
           -------
           |     |
           | C L |
           -------
             | |
 H H C   L
 | | |   |
-------  |
|     |  |
| H M |  |
-------  |
  | |    |

结果应该是输入中的“开”位数,以二进制表示为高、中、低位。

假设每个BB在其输入的0、1、2或3为开时输出一个2位二进制计数00、01、10或11。还假设所需的最终输出O₄O₂O₁ 是一个3位二进制计数000。。。111,当0,1。。。7个输入位中的7个i₁...我₇ 你在看电视。一般来说,对于这样的问题,您可以为BB的功能编写一个布尔表达式,为所需的输出编写一个布尔表达式,然后合成输出。然而,在这种特殊情况下,请尝试使用显而易见的方法₁, 我₂, 我₃ 进入第一个盒子B₁, 而我₄, 我₅, 我₆ 进入第二个盒子B₂, 而我₇ 输入到第三个框B的一个输入中₃. 看看这个,很明显,如果你从B运行单位输出₁ B₂ 输入到B的其他两个输入中₃ 然后从B输出的单位₃ 等于所需的值O₁. 你可以从B得到两个输出的总和₁, B₂, B₃ 通过a框B₄, 这个和等于期望值O₄O₂.

这将需要4个黑匣子。@EgorSkriptunoff-您可以指定如何使用4个黑匣子来实现它吗?您只需要计数还是还需要打开哪些位?既然每个框都有三个输入位,那么这七个输入位不是只有三个框,还是我遗漏了什么?@groovy我假设OP想要输出输入中“on”位数的二进制表示,这将占用4个黑框。