一个不简洁的约瑟夫环解法
约瑟夫环类似模型:已知有n个人,每次间隔k个人剔除一个,求最后一个剩余的。
此解法为变种,k最初为k-2,之后每次都加1。
例:n=5,k=3。从1开始,第一次间隔k-2=1,将3剔除,第二次间隔k-1=2,将1剔除。依此类推,直至剩余最后一个元素。
核心思路:将原列表复制多份横向展开,同时将间隔存为一个列表。每次根据间隔获取被剔除的元素,同时将此元素存入一个剔除列表中。若被剔除元素不存在于剔除列表,则将其加入,若已存在,则顺势后移至从未加入剔除列表的元素,并将其加入。如此重复n-1次。面试遇到的题,当时只写了思路,没完成代码
#! /usr/bin/env python3
# coding = utf-8def one_left(n, k):list0 = [i for i in range(1, n + 1)] # 初始列表listx = []i = 0while i <= 2*n:i += 1listx += list0 # 根据循环次数得到扩大列表print("listx", listx)list1 = [] # 用于保存被筛掉的元素intervals = [l for l in range(k - 2, k - 2 + n - 1)]print('intervals', intervals)current_key = 0 # 当前下标for interval in intervals: # 最外层循环,循环次数为n-1current_key += (interval + 1) # 间隔数+1if listx[current_key] not in list1: # 如果剔除元素不在list1中list1.append(listx[current_key])else:while True:if listx[current_key] in list1:current_key += 1else:breaklist1.append(listx[current_key])print('剔除列表为:',list1)print('剩余元素为:',set(list0)-set(list1))def main():one_left(n=5, k=4)if __name__ == '__main__':main()
转载于:https://blog.51cto.com/joyshow/1963987
一个不简洁的约瑟夫环解法相关推荐
- 约瑟夫环解法大全(C语言版)
前言: 约瑟夫环不愧是一道经典的算法题,原来也经常看到,但一直没有动手编码研究.最近又被同学提起这个问题,就研究了一下,发现这个问题可以挖掘的东西有很多,怪不得一直是面试的热门问题. 解法一,使用链表 ...
- 映射递归循环-约瑟夫环问题递归解法的一点理解
先说明一点,如果有什么不对的地方,欢迎大家批评指正. 先来看这个类型的某个题目描述: 约瑟夫生者死者游戏 约瑟夫游戏的大意:30个游客同乘一条船,因为严重超载, 加上风浪大作,危险万分.因此船长告诉乘 ...
- 【数据结构与算法】 01 链表 (单链表、双向链表、循环链表、块状链表、头结点、链表反转与排序、约瑟夫环问题)
一.线性表 1.1 概念与特点 1.2 线性表的存储结构 1.3 常见操作 1.4 应用场景 二.链表 2.1 链表简介 2.2 单向链表(单链表) 2.21 基本概念 2.22 单链表基本操作 2. ...
- 约瑟夫环问题-以python为舟
约瑟夫环问题-以python为舟 文章目录 约瑟夫环问题-以python为舟 前言 一.约瑟夫环的实现原理 二.具体的实现方法 1.分割列表-用于解决重新报数问题 2.完整代码 运行结果 总结 前言 ...
- 约瑟夫环问题 —— 算法
约瑟夫环问题 前言 约瑟夫环问题一 约瑟夫环问题二 约瑟夫环问题三 约瑟夫环问题四 约瑟夫环问题五 约瑟夫环问题六 约瑟夫环问题七 约瑟夫环问题解决一 -- 模拟队列 约瑟夫环问题解决二 -- 环形链 ...
- 约瑟夫环 java代码_约瑟夫环算法的Java实现代码
相信大家都知道这是一个的算法问题,约瑟夫环的c语言实现是利用了指针链表的形式,java实现呢,我的这个是用了内部类. 算法描述:n个人围成一圈,每人有一个各不相同的编号,选择一个人作为起点,然后顺时针 ...
- 约瑟夫环问题的两种解法(详解)
约瑟夫环问题的两种解法(详解) 题目: Josephus有过的故事:39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓.于是决定了自杀方式,41个人排成一个圆 ...
- 求约瑟夫环问题最后胜利者的一般解法以及数学推导方法
问题描述: 约瑟夫环问题(Josephus) 用户输入M,N值,从1至N开始顺序循环数数,每数到M输出该数值,直至全部输出.写出C程序. 解法一: 思路:建立一个有N个元素的循环链表,然后从链表表头遍 ...
- —— 约瑟夫环(自杀环)的数学解法
首先简单介绍一下约瑟夫环: 约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围. 从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从 ...
- 约瑟夫环问题python解法_约瑟夫环问题python解法 | 学步园
约瑟夫环问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围.从编号为k的人开始报数,数到k的那个人被杀掉:他的下一个人又从1开始报数,数到k的那个人又被杀掉:依此规律重复下去,直到 ...
最新文章
- HDU1232——通畅工程(并查集)
- 网页弹出框----播放视频
- 生成树的冗余与负载分担技术
- 企业《DHCP服务器群集》高级配置
- 趋势科技企业级杀软产品俩 0day 已遭利用
- 用Python生成测试数据
- eplices如何导入外部代码_搜索引擎的蜘蛛是如何爬的
- python字符串 切片_Python切片字符串
- import java.io用什么写_问问各位大佬,使用了fiilewrite,为什么写入不到文件
- linux 使用apidoc 生成Restful web Api文档
- 汇编环境搭建 Windows10 VS2019 MASM32
- 安装使用FLTK图形库
- 线序 RS232 RJ45 USB
- 【408预推免复习】计算机网络(谢希仁第七版)第三章——数据链路层
- OpenCV—python 角点特征检测之一(cornerHarris、Shi-Tomasi、FAST)
- 学习DNS,这一篇文章就够了
- 2005-04-28 把爸爸锁在阳台上
- Linux 系统调用深思:从原理到实战
- ASP.NET MVC4 音乐商店,Entity Framework 5.0
- c语言程序三角形实验报告,C语言程序设计实验报告(6)
热门文章
- pandas的基本函数
- orm php 自定义,Eloquent ORM 自定义 builder
- django mysql处理_利用Django去操作数据库并完成简易的登录及编辑功能
- 如何刷新linux的fdisk,②linux fdisk
- android异步任务框架,详解Android App中的AsyncTask异步任务执行方式
- java中volatile关键字_Java中Volatile关键字详解
- python基础:字符串操作
- 电脑上没有iis组件,怎么才能安装iis?
- 10年年初写的述职报告
- 蓝桥杯 前缀判断——2013年省赛C/C++A组真题5