代码实现逻辑

发布于 2022-09-03 08:29:24 字数 129 浏览 7 评论 0

现在有100个灯泡,每个灯泡都是关着的,第一趟把所有的灯泡灯泡打开,第二趟把偶数位的灯泡制反,第三趟让第3,6,9....的灯泡制反.......第100趟让第100个灯泡制反,问经过一百趟以后有多少灯泡亮着。

代码如何实现:

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

请别遗忘我 2022-09-10 08:29:24

補充一下 @hsfzxjy 所說的

燈泡只要有一個因數就會被開關一次
  • 因為進行第 i 趟開關的時候, 會把 i 的倍數的燈開關

  • 也就是說, 因數有 i 的燈泡在此趟會被開關

從上面可以推出:

燈泡有奇數個因數最後的結果會是亮著的 (開關奇數次, 會是亮的)

又可以歸納出:

完全平方數的燈泡會亮著 (因為只有完全平方數有奇數個相異因數, 其他都會有兩兩成對的相異因數)

如果你要完全模擬這個狀況的話, 這邊有 Python 的代碼:

lamps = [ False for i in range(100) ]

# print('starts', lamps)

for i in range(1, len(lamps)+1):
    for idx, lamp in enumerate(lamps):
        if (idx + 1) % i == 0:
            lamps[idx] = not lamp
    # print(i, lamps)

print(lamps.count(True))

但根據上面的結論, 你只要知道燈泡數內有幾個完全平方數就好了:

i = 1
while i**2 <= 100:
    i += 1

print(i-1)

我回答過的問題: Python-QA

记忆で 2022-09-10 08:29:24

所有完全平方数亮着

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文