带锁的门_Python

带锁的门

在走廊上有n个带锁的门,从1到n依次编号。最初所有的门都是关着的。我们从门前经过n次,每次都从1号门开始。在第i次经过时(i = 1,2,…, n)我们改变i的整数倍号锁的状态;如果门是关的,就打开它;如果门是打开的,就关上它。在最后一次经过后,哪些门是打开的,哪些门是关上的?有多少打开的门?

猜测:最终是第 1 1 1号门与第 n 2 \frac{n}{2} 2n号门开着,下面通过代码根据计算机执行的结果进行验证

import numpy as np
def door_with_lock(n):
    # 创造出n个带锁且关着的门,为了便于遍历,创造n+1个,关着为0,开启为1
    doors = np.zeros(n + 1, dtype=int)
    for count in range(1, n + 1):
        for i in range(1, n + 1):
            if i % count == 0:  # 取余为0即为整数倍
                if doors[i] == 1: doors[i] = 0
                else: doors[i] = 1
    open_list = []
    for i in range(1, n + 1):
        if doors[i] == 1:
            open_list.append(i)
    return '共{0}个门,其中处于开着状态的门的编号为{1}'.format(n, open_list)
print(door_with_lock(7))
print(door_with_lock(10))
print(door_with_lock(100))
print(door_with_lock(200))
共7个门,其中处于开着状态的门的编号为[1, 4]
共10个门,其中处于开着状态的门的编号为[1, 4, 9]
共100个门,其中处于开着状态的门的编号为[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
共200个门,其中处于开着状态的门的编号为[1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196]

根据代码执行结果可知猜测是有错误的,最终根据代码结果得出开着的门的编号规律如下:
编号均为 k 2 k^2 k2,其中 k k k是一段连续的整数,且 1 ⩽ k 2 ⩽ n 1 \leqslant k^2 \leqslant n 1k2n

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值