蛮力法之狱吏问题

狱吏问题


一、问题描述

狱吏问题
问题描述:
国王要对囚犯进行大赦,他通过以下方法来挑选要释放的犯人,假设有一排n间牢房,国王让一个狱吏从
牢房走过,每经过一次就按照一定规则转到一次门锁,门锁每转动一次,原来锁着的门就会打开,而原
来打开的门机会被锁上,当狱吏经过n次后,如果门锁是打开的,则犯人就会被释放,反之就会被继续
关押
狱吏开锁规则:
第K次经过牢房,从第K间开始转动,每隔K-1间牢房转动一次

二、代码实现

代码如下

# -*- coding: utf-8 -*-
"""
Created on Fri Nov 12 10:07:52 2021

@author: lenovo
狱吏问题
问题描述:
国王要对囚犯进行大赦,他通过以下方法来挑选要释放的犯人,假设有一排n间牢房,国王让一个狱吏从
牢房走过,每经过一次就按照一定规则转到一次门锁,门锁每转动一次,原来锁着的门就会打开,而原
来打开的门机会被锁上,当狱吏经过n次后,如果门锁是打开的,则犯人就会被释放,反之就会被继续
关押
狱吏开锁规则:
第K次经过牢房,从第K间开始转动,每隔K-1间牢房转动一次
两种方法
"""

def warder1(n):
    
    room = [1 for i in range(n+1)]
    for i in range(1,n):
        for j in range(i,n,i):
            room[j] = 1-room[j]
    
    room_free_num = [i for i in range(1,n+1) if room[i] == 0]
    print("释放的牢房号数为:"+str(room_free_num))    

warder1(145)

def warder2(n):
    
    room_free_num = [i*i for i in range(1,n+1) if i*i <= n]
    print("释放的牢房号数为:"+str(room_free_num)) 
warder2(145)

2.打印结果

在这里插入图片描述


下一篇

蛮力法之串的匹配问题

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

炸鸡叔老白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值