使用Python计算n个人翻转的开关数

使用Python计算n个人翻转的开关数

假设有一个数字n、一个房间里有n个切换器和n个人,他们按照以下方式翻转开关 −

  • 第一个人来翻转所有的开关。
  • 第二个人来翻转那些是2的倍数的开关:2、4、6,…
  • 第i个人来翻转是i的倍数的开关。以此类推。

我们需要找到最后有多少个开关处于开启状态。

因此,如果输入是n=5,那么输出将为2,因为最初的灯泡为[0, 0, 0, 0, 0]。

  • 玩家1后:[1, 1, 1, 1, 1]
  • 玩家2后:[1, 0, 1, 0, 1]
  • 玩家3后:[1, 0, 0, 0, 1]
  • 玩家4后:[1, 0, 0, 1, 1]
  • 玩家5后:[1, 0, 0, 1, 0]

最终有2个灯是处于开启状态的

为了解决这个问题,我们将遵循以下步骤−

  • l := 0
  • r := n
  • while l <= r, do
    • mid := l + floor of (r – l)/2
    • if mid * mid <= n < (mid + 1)^2, then
      • return mid
    • 否则,当n < mid^2时,
      • r := mid
    • 否则,
      • l := mid + 1

示例

让我们看一下以下实现以更好地理解−

def solve(n):
   l, r = 0, n
   while l <= r:
      mid = l + (r - l) // 2
      if mid * mid <= n < (mid + 1) * (mid + 1):
         return mid
      elif n < mid * mid:
         r = mid
      else:
         l = mid + 1

n = 5
print(solve(n))

输入

5

输出

2

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程