开关灯问题(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()