为了账号安全,请及时绑定邮箱和手机立即绑定

代码实现逻辑

代码实现逻辑

蝴蝶不菲 2019-03-15 15:15:24
现在有100个灯泡,每个灯泡都是关着的,第一趟把所有的灯泡灯泡打开,第二趟把偶数位的灯泡制反,第三趟让第3,6,9....的灯泡制反.......第100趟让第100个灯泡制反,问经过一百趟以后有多少灯泡亮着。代码如何实现:
查看完整描述

2 回答

?
翻过高山走不出你

TA贡献1875条经验 获得超3个赞

燈泡只要有一個因數就會被開關一次

因為進行第 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

查看完整回答
反对 回复 2019-04-22
?
三国纷争

TA贡献1804条经验 获得超7个赞

所有完全平方数亮着


查看完整回答
反对 回复 2019-04-22
  • 2 回答
  • 0 关注
  • 542 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号