需求
有N盏灯放在一排,从1到N依次顺序编号,按一次灯开,再按一次灯灭。现在有两个人,第一个人将2的倍数的灯全部按下;第二个人将3的倍数的灯全部按下。问最终有几盏灯亮着?(最初的时候灯都是亮的)。
【输入格式】输入一个整数n。
【输出格式】输出最终有几盏灯亮着。
解决方法
n = int(input()) # 输入灯的总数
bulbs = [True] * n # 初始化灯的状态,默认所有的灯都是亮的
# 第一个人按下2的倍数的灯
for i in range(1, n+1):
if i % 2 == 0:
bulbs[i-1] = not bulbs[i-1]
# 第二个人按下3的倍数的灯
for i in range(1, n+1):
if i % 3 == 0:
bulbs[i-1] = not bulbs[i-1]
# 统计最终亮着的灯的数量
count = 0
for i in range(n):
if bulbs[i]:
count += 1
# 输出结果
print(count)
首先读入灯的总数n,然后用一个布尔型列表bulbs来表示每盏灯的状态,True表示亮,False表示灭。初始化时,所有的灯都是亮的。
然后第一个人按下2的倍数的灯,将其状态改变;第二个人按下3的倍数的灯,同样将其状态改变。
最后,统计最终亮着的灯的数量。遍历灯的状态列表bulbs,如果第i盏灯是亮的(即bulbs[i]为True),则计数器count加1。
最后输出最终亮着的灯的数量count即可。
知识点
1.bulbs[i-1] = not bulbs[i-1]
是指给变量i所对应的灯的布尔值进行替换,由于其中 bulbs[i-1]
中存放的是布尔值,所以直接not就可以了,意思是指不是(原来的布尔值),例:原来存放的是True ,更改后即为not True,即False,反之也是。