当前位置: 首页 > news >正文

每日一练:约瑟夫生者死者小游戏

在这里插入图片描述

1. 问题描述

  约瑟夫问题(Josephus problem)是一个经典的数学和计算机科学问题,源于犹太历史学家弗拉维奥·约瑟夫斯(Flavius Josephus)的著作《犹太战记》。问题的描述如下:
  在这个问题中,有n个人站成一个圈,从1n编号。从第一个人开始,每次数m个人,数到第m个人就将其从圈中删除,然后从下一个人开始重新数,重复这个过程,直到所有人都被删除。问题是,最后剩下的那个人的编号是多少?
  为了解决约瑟夫问题,可以使用递归或迭代的方法。下面是一个简单的递归解法的伪代码:

function josephus(n, m):if n == 1:return 1else:return (josephus(n - 1, m) + m - 1) % n + 1

  这个递归函数的基本思想是:假设已知n-1个人的问题的解,那么在这个基础上,考虑第n个人加入的情况。在每一轮中,我们实际上将问题规模缩小为n-1个人。
  注意,这里的编号是从1开始的,因为在问题的原始描述中,人的编号是从1到n的。在某些变体中,编号可能从0开始,因此在实现时需要注意这一点。

2. 解题思路

  解决约瑟夫问题的一般思路是通过模拟每一轮的删除过程,不断更新当前位置,并在满足终止条件时停止模拟。下面是一种基于迭代的解题思路和设计:
  解题思路

  1. 初始化: 创建一个包含n个人初始编号的列表,并初始化一个变量表示当前位置。
  2. 循环删除过程:
  • 在当前位置开始数m个人。
  • 计算出要删除的人的位置。
  • 从列表中删除该位置的人。
  • 更新当前位置为删除位置。
  1. 终止条件: 当剩下的人数满足终止条件时,停止循环。
  2. 返回结果: 根据具体要求返回结果。在约瑟夫问题中,通常是返回最后剩下的一个人的编号或一组编号。

3. 代码实现

3.1 代码实现一

  30 个人在一条船上,超载,需要 15 人下船。于是人们排成一队,排队的位置即为他们的编号。报数,从 1 开始,数到 9 的人下船。如此循环,直到船上人不能数到9人为止,问剩下的人的编号?

def josephus(n, m):# 创建一个列表,表示n个人的初始编号people = list(range(1, n + 1))# 初始化变量,表示当前位置current = 0# 循环,直到剩下8个人while len(people) > 8:# 计算下一个要删除的人的位置current = (current + m - 1) % len(people)# 删除当前位置的人del people[current]# 返回剩下的最后一个人的编号return people# 示例:有30个人,每次数9个人
result = josephus(30, 9)
print("最后剩下的人的编号是:", result) 

运行效果:

在这里插入图片描述

3.2 代码实现二

  题目修改为:
  30 个人在一条船上,超载,需要 15 人下船。于是人们排成一队,排队的位置即为他们的编号。报数,从 1 开始,数到 9 的人下船。如此循环,直到船上仅剩 15 人为止,问剩下的人的编号?

def josephus(n, m, k):# 创建一个包含n个人初始编号的列表people = list(range(1, n + 1))# 初始化变量,表示当前位置current = 0# 循环,直到剩下的人数满足终止条件while len(people) > k:# 在当前位置开始数m个人,计算出要删除的人的位置current = (current + m - 1) % len(people)# 从列表中删除该位置的人del people[current]# 返回剩下的人的编号return people# 示例:有30个人,每次数9个人删除,直至剩下15个人
result = josephus(30, 9, 15)
print("剩下的人的编号是:", result)

在这里插入图片描述

3.3 代码实现三

  题目修改为:
  30 个人在一条船上,超载,需要 15 人下船。于是人们排成一队,排队的位置即为他们的编号。报数,从 5 开始,数到 9 的人下船。如此循环,直到船上仅剩 15 人为止,问剩下的人的编号?

def josephus_with_start(n, m, k, start):people = list(range(1, n + 1))current = start - 1  # 起始位置while len(people) > k:current = (current + m - 1) % len(people)del people[current]return people# 示例:有30个人,每次数9个人删除,直至剩下15个人,起始位置为5
result = josephus_with_start(30, 9, 15, 5)
print("剩下的人的编号是:", result)

在这里插入图片描述

3.4 代码实现四

  题目修改为:
  30 个人在一条船上,超载,需要 15 人下船。于是人们排成一队,排队的位置即为他们的编号。报数,从 1 开始,数到 9 的人下船,但是每隔一轮人才下船。如此循环,直到船上仅剩 15 人为止,问剩下的人的编号?

def josephus_with_custom_deletion(n, m, k, deletion_rule):people = list(range(1, n + 1))current = 0while len(people) > k:current = deletion_rule(current, m, len(people))del people[current]return people# 示例:有30个人,每次数9个人删除,直至剩下15个人,但是每隔一轮删除一个人
def custom_deletion_rule(current, m, length):return (current + m) % lengthresult = josephus_with_custom_deletion(30, 9, 15, custom_deletion_rule)
print("剩下的人的编号是:", result)

在这里插入图片描述

4.参考:

https://www.runoob.com/python3/python-joseph-life-dead-game.html

在这里插入图片描述

相关文章:

每日一练:约瑟夫生者死者小游戏

1. 问题描述 约瑟夫问题(Josephus problem)是一个经典的数学和计算机科学问题,源于犹太历史学家弗拉维奥约瑟夫斯(Flavius Josephus)的著作《犹太战记》。问题的描述如下:   在这个问题中,有n…...

双指针算法(题目与答案讲解)

文章目录 题目移动零复写零两数之和N数之和(>2个数) 答案讲解移动零复写零两数之和N数之和 题目 力扣 移动零 1、移动零:题目链接 复写零 2、复写零:题目链接 两数之和 3、两数之和题目链接 N数之和(>2个数) 4、N数之和(三个数、四个数) 三个数:题目链接 四个数题目链接…...

python服装电商系统vue购物商城django-pycharm毕业设计项目推荐

系统面向的使用群体为商家和消费者,商家和消费者所承担的功能各不相同,所对象的权限也各不相同。对于消费者和商家设计的功能如下: 对于消费者设计了五大功能模块: (1) 商品信息:用户可在商品…...

数据治理技术:研究现状与数据规范

随着信息技术的迅速发展,数据规模逐渐扩大,与此同时,劣质数据也随之而来,极大地降低了数据挖掘的质量,对信息社会造成了严重的困扰,劣质数据大量存在于很多领域和机构,国外权威机构的统计表明:美…...

一文彻底理解索引下推

了解索引下推吗?二级索引取出的数据是依次回表还是一次回表?索引下推是为了什么发明的? 看完这个文章你将知道上面的问题。 索引下推的概念 从MySQL5.6开始引入的一个特性,索引下推通过减少回表的次数来提高数据库的查询效率; 注意&#…...

Springboot3+vue3从0到1开发实战项目(一)

一. 可以在本项目里面自由发挥拓展 二. 知识整合项目使用到的技术 后端开发 : Validation, Mybatis,Redis, Junit,SpringBoot3 ,mysql,Swagger, JDK17 ,JWT,项目部署 前端开发: Vue3,Vite&am…...

[字符串操作] 有年代的病历单

有年代的病历单 题目描述 小英是药学专业大三的学生,暑假期间获得了去医院药房实习的机会。 在药房实习期间,小英扎实的专业基础获得了医生的一致好评,得知小英在计算概论中取得过好成绩后,主任又额外交给她一项任务&#xff0c…...

怎么批量提取文件名字到Excel中?

怎么批量提取文件名字到Excel中?Excel是由微软公司开发的一种电子表格软件,它是Microsoft Office办公套件的一部分。Excel提供了强大的数据处理和分析功能,用户可以使用Excel创建、编辑和管理电子表格,进行各种计算、数据分析、图…...

QT搭建的Ros/librviz的GUI软件

1.前言 开发初期学习了下面博主的文章,也报了他在古月局的课,相当于感谢吧。 ROS Qt5 librviz人机交互界面开发一(配置QT环境)-CSDN博客​​​​​​​r 软件前期也是参考他的开源项目 GitHub - chengyangkj/Ros_Qt5_Gui_App …...

Docker 概述与安装

文章目录 1. Docker简介2. 传统虚拟机和容器3. Docker运行速度快的原因4. Docker软件4.1 Docker镜像4.2 Docker容器4.3 Docker仓库 5. Docker架构6. CentOS安装Docker6.1 卸载旧版本6.2 配置yum资源库6.3 安装Docker引擎6.4 启动docker引擎6.5 设置开机自启 7. 卸载Docker8. 运…...

JS作用域与作用域链

让我为大家介绍一下作用域与作用域链吧! 作用域 作用域规定了变量能够访问的“范围”,离开了这个“范围”变量便不能被访问。 作用域分为:局部作用域,全局作用域 一、局部作用域 局部作用域分为函数作用域与块作用域 1.函数作…...

elmentui 查看大图组件 点击图片关闭弹窗方法

elmentui 查看大图组件 点击图片关闭弹窗方法 html <el-imageref"Imgs":src"item.url ? item.url : ":preview-src-list"item.url ? [item.url] : []"click.stop"handlePreviewClose"class"alarm_img"/>js //图片…...

蓝桥杯官网练习题(最长子序列)

题目描述 我们称一个字符串S 包含字符串 T 是指 T 是 S 的一个子序列&#xff0c;即可以从字符串 S 中抽出若干个字符&#xff0c;它们按原来的顺序组合成一个新的字符串与 T 完全一样。 给定两个字符串 S 和 T&#xff0c;请问 T 中从第一个字符开始最长连续多少个字…...

Make sure that using this pseudorandom number generator is safe here.

问题类型&#xff1a;安全热点 安全问题级别&#xff1a;MEDIUM 一、问题代码 工具类Package&#xff1a; Java commons-lang3 库 RandomUtils 随机数工具类 import org.apache.commons.lang3.RandomUtils; 用法&#xff1a; RandomUtils.nextInt(0, 999999999) //生成 0…...

【C/C++】常见模拟题题解

题解 模拟双目运算符一元二次方程求解水仙花数统计学生成绩学生成绩管理模拟选举大小写字符转换最大公约数、最小公倍数字符串反序 模拟双目运算符 编写一个根据用户键入的两个操作数和一个双目运算符&#xff0c;由计算机输出结果的程序。 #include<stdio.h>int opera…...

TikTok 购物和直播的 5 个简单技巧

TikTok 的一切都很大&#xff1a;应用程序下载量、受众规模和病毒式营销活动。因此&#xff0c;该公司多方面进军社交商务也就不足为奇了。是的&#xff0c;这将是巨大的。自去年年底以来&#xff0c;TikTok Shopping 和TikTok 直播购物活动已在一些市场上线&#xff0c;并将于…...

神经网络中BN层简介及位置分析

1. 简介 Batch Normalization是深度学习中常用的技巧&#xff0c;Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift (Ioffe and Szegedy, 2015) 第一次介绍了这个方法。 这个方法的命名&#xff0c;明明是Standardization, 非…...

BGP基础配置

EBGP是AS之间 IBGP是AS内 R1-R2是EBGP,R4-R5是EBGP R2-R3-R4是IBGP 第一步基础配置&#xff1a;IP地址 [r1-GigabitEthernet0/0/0]ip ad 12.0.0.1 24 [r1-LoopBack0]ip ad 1.1.1.1 32 [r2-GigabitEthernet0/0/0]ip ad 12.0.0.2 24 [r2-LoopBack0]ip ad 2.2.2.2 32 [r2-Loop…...

【开题报告】基于深度学习的驾驶员危险行为检测系统

研究的目的、意义及国内外发展概况 研究的目的、意义&#xff1a;我国每年的交通事故绝对数量是一个十分巨大的数字&#xff0c;造成了巨大的死亡人数和经济损失。而造成交通事故的一个很重要原因就是驾驶员的各种危险驾驶操作行为。如果道路驾驶员的驾驶行为能够得到有效识别…...

Linux云服务器打包部署前端Vue项目

1. 打包 在项目包的终端使用命令打包成dist文件。 npm run build2. Linux云服务器上创建文件夹 mkdir /home/www/dist注&#xff1a;dist文件夹不用创建&#xff0c;将打包好的dist.zip放进去&#xff0c;然后解压就行。 3. 安装nginx yum install -y nginx4. 修改配置文件…...

智慧医疗能源事业线深度画像分析(上)

引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...

Python:操作 Excel 折叠

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

对WWDC 2025 Keynote 内容的预测

借助我们以往对苹果公司发展路径的深入研究经验&#xff0c;以及大语言模型的分析能力&#xff0c;我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际&#xff0c;我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测&#xff0c;聊作存档。等到明…...

ios苹果系统,js 滑动屏幕、锚定无效

现象&#xff1a;window.addEventListener监听touch无效&#xff0c;划不动屏幕&#xff0c;但是代码逻辑都有执行到。 scrollIntoView也无效。 原因&#xff1a;这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作&#xff0c;从而会影响…...

作为测试我们应该关注redis哪些方面

1、功能测试 数据结构操作&#xff1a;验证字符串、列表、哈希、集合和有序的基本操作是否正确 持久化&#xff1a;测试aof和aof持久化机制&#xff0c;确保数据在开启后正确恢复。 事务&#xff1a;检查事务的原子性和回滚机制。 发布订阅&#xff1a;确保消息正确传递。 2、性…...

MySQL 主从同步异常处理

阅读原文&#xff1a;https://www.xiaozaoshu.top/articles/mysql-m-s-update-pk MySQL 做双主&#xff0c;遇到的这个错误&#xff1a; Could not execute Update_rows event on table ... Error_code: 1032是 MySQL 主从复制时的经典错误之一&#xff0c;通常表示&#xff…...

go 里面的指针

指针 在 Go 中&#xff0c;指针&#xff08;pointer&#xff09;是一个变量的内存地址&#xff0c;就像 C 语言那样&#xff1a; a : 10 p : &a // p 是一个指向 a 的指针 fmt.Println(*p) // 输出 10&#xff0c;通过指针解引用• &a 表示获取变量 a 的地址 p 表示…...

pycharm 设置环境出错

pycharm 设置环境出错 pycharm 新建项目&#xff0c;设置虚拟环境&#xff0c;出错 pycharm 出错 Cannot open Local Failed to start [powershell.exe, -NoExit, -ExecutionPolicy, Bypass, -File, C:\Program Files\JetBrains\PyCharm 2024.1.3\plugins\terminal\shell-int…...

​​企业大模型服务合规指南:深度解析备案与登记制度​​

伴随AI技术的爆炸式发展&#xff0c;尤其是大模型&#xff08;LLM&#xff09;在各行各业的深度应用和整合&#xff0c;企业利用AI技术提升效率、创新服务的步伐不断加快。无论是像DeepSeek这样的前沿技术提供者&#xff0c;还是积极拥抱AI转型的传统企业&#xff0c;在面向公众…...

PydanticAI快速入门示例

参考链接&#xff1a;https://ai.pydantic.dev/#why-use-pydanticai 示例代码 from pydantic_ai import Agent from pydantic_ai.models.openai import OpenAIModel from pydantic_ai.providers.openai import OpenAIProvider# 配置使用阿里云通义千问模型 model OpenAIMode…...