📌  相关文章
📜  门| Sudo GATE 2020 Mock I(2019 年 12 月 27 日)|问题 29(1)

📅  最后修改于: 2023-12-03 15:28:47.272000             🧑  作者: Mango

Markdown 结构

问题描述

在这道题中,我们需要处理门的开合状态。门只能以2个状态之一开启或关闭,我们需要编写一个程序来模拟给定门的开合情况。

要求

实现一个函数 flip_doors(n:int) ,参数 n 代表门的数量,返回值为列表,列表中的元素代表每扇门的最终状态(0 代表关闭状态,1 代表开启状态)。

flip_doors 函数将以如下方式操作门:

  • 从第一扇门开始,将每个第 i 个门 (i是2、3、4....n的倍数) 切换状态(开门变为关门,关门变为开门)
  • 接下来,从第二扇门开始,将每个第 i 个门 (i是3、6、9....n的倍数,且i不包含2的因子) 切换状态
  • 以此类推,每次选择没有前面扇门干扰的倍数,直到最后一扇门
  • 返回最终状态
示例

输入:

flip_doors(4)

输出:

[1, 0, 0, 1]

解释:

  • 第一遍,将2, 4号门打开
  • 第二遍,将3号门关闭
  • 第三遍,将4号门关闭

因此,最终状态为[1,0,0,1]。

代码实现

def flip_doors(n:int)->List[int]:
    doors = [0 for i in range(n)]
    for i in range(1, n):
        j = i
        while j < n:
            doors[j] = 1 - doors[j]
            j += i+1 if (i+1)%2==0 else i
    return doors