问题描述🪐
有n盏灯,编号为1~n。第1个人把所有灯打开,第2个人按下所有编号为2的倍数
的开关(这些灯将被关掉),第3个人按下所有编号为3的倍数的开关(其中关掉的灯将
被打开,开着的灯将被关闭),依此类推。一共有k个人, 问最后有哪些灯开着?
输入: n与k输出灯的编号。
样例输入:7 3
样例输出:1 5 6 7
问题分析🪐
本题考察的是数组的使用,必须先定义一个一定大小的数组,然后给数组赋初值为False代表灯处于关闭
状态,然后从第一个人也就是i开始遍历数组,一旦灯的编号取余i的编号为0时代表这个人可以扣动开关
也就是可以开灯或者关灯。
代码实现🪐
老规矩先上运行结果:
import sys n,k=sys.stdin.readline().strip().split() n,k=int(n),int(k) flag=True #用于记录是第一个还是最后一个 l=[False]*n#Python中没有规定数组,所以可以使用这种方法创建一个数组 for i in range(1,k+1): for j in range(1,n+1): if j%i==0: l[j-1]= not l[j-1] # 遍历数组,找到开着的灯。 for i in range(n): if l[i]: if flag: print(i+1,end="") flag=False else: print("",i+1,end="")