灯泡状态随机,设计算法,使100个灯泡都亮...

    刷微博期间,看到这样的题目,一下子勾起了当年搞ACM的劲头,在脉脉职言中,有这样一个题目。


    算法题:一个圆环上有100个灯泡,灯泡有打开关闭两种状态,灯泡状态随机。设计算法,使灯泡都亮。看到微博中还是有很多大神级别的分析的,你怎么看呢?

解答:

第一阶段:

    如果给100个灯泡编号0~99 ,顺序往下走,如果灯是亮的就不管,灭的就按下后面灯泡使这个灯亮(在第一循环内,也就是还没有从99走到0)。如果都是亮的那正好万事大吉完事!如果不是的话,期间肯定有是灭的,不管它在哪个位置,重复【亮的就不管,灯是灭的把下一个灯泡按一下开关】规则(都在第一轮循环里面)。98号灯肯定是灭的,看99号灯是灭还是亮,如果99号灯是灭的,那就再按一下99号灯的开关,这样全环只有一个灭的灯(0号灯)。如果99号灯是亮的,这样只有98号灯是灭的。总之,全环只有一个灯是灭的。

第二阶段:

    将那个灭的灯标记为0号灯,后面的灯依次按顺序排序,每3个一组,中间的那个灯按开关,举例,将2号灯开关打开,1,2,3号灯就都灭了,整个循环跑完,所有的灯都灭了。

第三阶段:

    每个灯泡的开关都按一遍。以上步骤就可以使最后的灯泡全亮。

代码如下:

import random
i =0
j = [] #100个灯泡
while True:
'''创建100个灯泡'''
if i == 100:
break
    k = ['亮','暗']
    k = random.sample(k, 1)
    j.append(k)
    i += 1
print(j)
j[0] = ['亮']#选择一个亮灯泡,标记为0号
m,n = 0,0
while True:
    m,s,n = m+1,m+2,m+3


if n==100:
if j[m] == ['暗']:
            j[m] = ['亮']
break
if j[m]==['暗']:
        j[m] = ['亮']
if j[s] == ['暗'] and j[n] == ['暗']:
            j[s] = ['亮']
            j[n] = ['亮']


elif j[s] == ['亮'] and j[n] == ['暗']:
            j[s] = ['暗']
            j[n] = ['亮']


elif j[s] == ['暗'] and j[n] == ['亮']:
            j[s] = ['亮']
            j[n] = ['暗']


else:
            j[s] = ['暗']
            j[n] = ['暗']
print(j)

    不知道大家有什么解法,欢迎解答,指点迷津。

推荐阅读

(点击标题可跳转阅读)

关于作者 — 聊聊自己的经历

经典资料强烈推荐 | 目录汇总 | 下载说明

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值