开关已串联连接

时间:2015-12-16 05:17:27

标签: algorithm data-structures binary

我在网上遇到了以下问题。我想弄清楚如何处理这个问题?有人可以帮我提出任何建议吗?提前致谢。

有可以通过遥控器控制的开关,n这样的开关是串联连接的,并且在有一个灯泡的末端,遥控器有一个按钮,用于切换开关的状态(开启和关闭,反之亦然) ),但遥控器仅适用于与它们电连接的开关,当所有先前的开关都打开时,开关连接,当所有开关都打开时,灯泡打开(假设第一个开关始终连接) 。首先,所有开关都关闭,只连接第一个开关。

输入:

  • N(开关数),1< N< 30
  • K(按下按钮的次数),1< k< 10 ^ 7

输出:1(如果灯泡打开),-1(如果不是)

1 个答案:

答案 0 :(得分:-1)

让我们将按钮的状态表示为 0 (如果开关为OFF)和 1 (如果开关ID为OFF)。所以我们初始状态为 0000 ... 0 (n个零),我们必须达到状态 1111 ... 1 (n个)才能让灯泡切换上。假设每个状态都是相应的二进制数。

让第1个开关为最低有效位,第n个位为最高有效位。当我们在状态 i 切换开关时,下一个状态将是 i + 1 。这很容易观察:如果我们用二进制写 i-th 状态,让 j 成为第一个 0 的位置重要的一点。切换后,第j 位置之前的所有 1 将变为 0 ,位置 j 的位将变为 1 ,这将是(i + 1)-th 状态。这相当于将 1 添加到州 i

因此要达到最终状态,需要完全((2 ^(n + 1)) - 1)步骤。所以,如果k <所需的步数,然后灯泡将关闭,否则它将为ON。