NOC练习题6:灯开灯关问题

需求

有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,反之也是。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值