Python常用算法--解决数据结构问题【附源码】

一、约瑟夫环问题

解释:约瑟夫环(Josephus Problem)是一个著名的数学问题,它描述了一个关于围坐一圈的人进行游戏的场景。游戏规则是从一个人开始,顺序报数,每报到特定数目的人将会被排除出圈子,然后从被排除的下一人开始继续报数,游戏继续进行直到最后剩下一个人。

代码实现方法一:使用队列法,具体的做法是不断地将队列的首部元素移到末尾,直到达到指定的数目,然后删除元素。重复这个过程,直到只剩下最后一个元素。代码定义了一个函数josephus(n, m),它接受总人数n和要报数的数目m作为参数,返回最后一个剩下的人的编号。代码中通过一个while循环来模拟整个过程,直到圈中只剩下一个人,具体代码如下:

def josephus(n, m):
    """
    解决约瑟夫环问题。
    :param n: 总人数
    :param m: 每报数到m的人将被排除
    :return: 存活下来的最后一个人的位置(从1开始)
    """
    people = list(range(1, n + 1))  # 生成一个1到n的列表,代表围坐一圈的人
    i = 0  # 索引,用于报数
    while len(people) > 1:  # 只要圈中人数大于1就继续游戏
        i = (i + m - 1) % len(people)  # 报数m-1次,因为索引从0开始计数,所以需要减1
        people.pop(i)  # 移除被排除的人
    return people[0]

# 测试
n = 41  # 总人数
m = 3   # 报数到3的人将被排除
survivor = josephus(n

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/599208.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SAP 资产管理中如何调整折旧(摊销)金额

在资产管理的日常中可能涉及资产折旧金额的调整(或者需要调增折旧,或者调减折旧额)。这是需要使用到事务代码ABAA或者ABMA。在SAP中,ABAA和ABMA是两个不同的事务代码,它们都与固定资产折旧相关,但用途和处理…

使用pytorch构建有监督的条件GAN(conditional GAN)网络模型

本文为此系列的第四篇conditional GAN,上一篇为WGAN-GP。文中在无监督的基础上重点讲解作为有监督对比无监督的差异,若有不懂的无监督知识点可以看本系列第一篇。 原理 有条件与无条件 如图投进硬币随机得到一个乒乓球的例子可以看成是一个无监督的GAN&…

pytorch交叉熵

目录 1. Entropy2. 交叉熵3. 二分类4. 为什么分类问题使用交叉熵5. 代码示例 1. Entropy Entropy中文是熵的意思,它代表一种不确定性,不确定性越高惊喜度也就越高。 如上图,假设熵代表中奖概率,当熵为2 的中奖概率为1/4没什么惊…

c++的学习之路:15、list(2)

本章主要是讲模拟实现list,文章末附上代码。 目录 一、创建思路 二、构造函数 三、迭代器 四、增删 五、代码 一、创建思路 如下方代码,链表是由一块一块不连续的空间组成的,所以这里写了三个模板,一个是节点,一…

【论文速读】| 大语言模型平台安全:将系统评估框架应用于OpenAI的ChatGPT插件

本次分享论文为:LLM Platform Security: Applying a Systematic Evaluation Framework to OpenAI’s ChatGPT Plugins 基本信息 原文作者:Umar Iqbal, Tadayoshi Kohno, Franziska Roesner 作者单位:华盛顿大学圣路易斯分校,华盛…

OpenResty基于来源IP和QPS来限流

桶原理 我们可以想像: 有一只上面进水、下面匀速出水的桶,如果桶里面有水,那刚进去的水就要存在桶里等下面的水流完之后才会流出,如果进水的速度大于水流出的速度,桶里的水就会满,这时水就不会进到桶里,而…

【新手上路】C#联合Halcon第一个demo搭建

前言 学习Halcon目的是能够利用C#封装成一个视觉的上位机应用配合机器人或者过程控制来提高生产的效率,尤其是在检测外观和定位方面的应用。现在我们就来搭建第一个demo。让他们能够跑起来! Halcon方面 打开Halcon软件,然后先随便写一个代…

electron-egg 如何把任意网站变成桌面软件

以前,开发一个桌面软件要花费大量的人力和时间。现在随着Electron的出现,大大简化了开发门槛。今天,给大家介绍一个工具,让你5分钟之内就把一个网站变成一个可安装的桌面软件。 所需工具 electron-egg是一个简单、快速、功能丰富…

日期时间相关的类

分界线jdk8 jdk8之前和之后分别提供了一些日期和时间的类,推荐使用jdk8之后的日期和时间类 Date类型 这是一个jdk8之前的类型,其中有很多方法已经过时了,选取了一些没有过时的API //jdk1.8之前的日期 Date Date date new Date(); // 从1970年…

解决 macOS 系统向日葵远程控制鼠标、键盘无法点击的问题

解决 macOS 系统向日葵远程控制鼠标\键盘无法点击的问题 1、首先正常配置,在系统偏好设置 - 安全性与隐私内,将屏幕录制、文件和文件夹、完全的磁盘访问权限、辅助功能全部都加入向日葵客户端 2、通过打开的文件访达,使用command shift G…

leetcode代码记录(下一个更大元素 I

目录 1. 题目:2. 我的代码:小结: 1. 题目: nums1 中数字 x 的 下一个更大元素 是指 x 在 nums2 中对应位置 右侧 的 第一个 比 x 大的元素。 给你两个 没有重复元素 的数组 nums1 和 nums2 ,下标从 0 开始计数&#x…

嵌入式学习49-单片机2

指令周期 1M 机器周期 12M (晶体震荡器产生) 中断两种方式 …