java - 代码实现逻辑
PHP中文网
PHP中文网 2017-04-18 09:13:49
0
2
263

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

代码如何实现:

PHP中文网
PHP中文网

认证高级PHP讲师

全部回复(2)
伊谢尔伦

补充一下 @hsfzxjy 所说的

燈泡只要有一個因數就會被開關一次
  • 因为进行第 i 趟开关的时候, 会把 i 的倍数的灯开关i 趟開關的時候, 會把 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🎜
黄舟

所有完全平方数亮着

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!