欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

开关灯问题(python)实现

程序员文章站 2024-03-20 20:22:34
...

'''
开灯问题:
    有从1到n依次编号的n名同学和n盏灯。1号同学将所有的灯都关掉;2号同学将编号为2的倍数的灯都打开;3号同学则将编号为3的倍数的灯做相反的处理(该号灯如打开,则关掉;如关闭,则打开);以后的同学都将自己的编号倍数的灯,做相反处理,问经n个同学操作后,那些灯是打开的
问题分析:
    1、前面已经学过用数组表示过个对象的某种状态,这里就定义有n个元素的a数组,他的每个下标变量a[i]视为一盏灯,i表示编号。a[i]=1表示第i盏灯处于打开状态,a[i]=0表示第i盏灯处于关于状态。
    2、那么如何实现将第i盏灯做相反处理的开关等操作呢,用if语句:当a[i]为1时,a[i]被重新复赋值为0;当a[i]为0时,a[i]被重新复赋值为1;,这里介绍,通过算术运算a[i]=1-a[i],就很好的模拟开关灯的操作,把这种形式的语句称为“乒乓开关”。    
'''
def main():
    a = []
    for i in range(0,1000):
        a.append(0)
    n = int(input("请输入n的值(n<1000):"))
    for i in range(2,n+1):
        k = 1
        while i * k <= n:
            a[i*k] = 1 - a[i*k]
            k +=1
    print("%d位同学操作后,还开着的灯有:" % (n), end='')
    for i in range(1,n+1):
        if a[i] == 1:
            print(i,end=',')


if __name__ == '__main__':
    main()