约瑟夫环类似模型:已知有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

一个不简洁的约瑟夫环解法相关推荐

  1. 约瑟夫环解法大全(C语言版)

    前言: 约瑟夫环不愧是一道经典的算法题,原来也经常看到,但一直没有动手编码研究.最近又被同学提起这个问题,就研究了一下,发现这个问题可以挖掘的东西有很多,怪不得一直是面试的热门问题. 解法一,使用链表 ...

  2. 映射递归循环-约瑟夫环问题递归解法的一点理解

    先说明一点,如果有什么不对的地方,欢迎大家批评指正. 先来看这个类型的某个题目描述: 约瑟夫生者死者游戏 约瑟夫游戏的大意:30个游客同乘一条船,因为严重超载, 加上风浪大作,危险万分.因此船长告诉乘 ...

  3. 【数据结构与算法】 01 链表 (单链表、双向链表、循环链表、块状链表、头结点、链表反转与排序、约瑟夫环问题)

    一.线性表 1.1 概念与特点 1.2 线性表的存储结构 1.3 常见操作 1.4 应用场景 二.链表 2.1 链表简介 2.2 单向链表(单链表) 2.21 基本概念 2.22 单链表基本操作 2. ...

  4. 约瑟夫环问题-以python为舟

    约瑟夫环问题-以python为舟 文章目录 约瑟夫环问题-以python为舟 前言 一.约瑟夫环的实现原理 二.具体的实现方法 1.分割列表-用于解决重新报数问题 2.完整代码 运行结果 总结 前言 ...

  5. 约瑟夫环问题 —— 算法

    约瑟夫环问题 前言 约瑟夫环问题一 约瑟夫环问题二 约瑟夫环问题三 约瑟夫环问题四 约瑟夫环问题五 约瑟夫环问题六 约瑟夫环问题七 约瑟夫环问题解决一 -- 模拟队列 约瑟夫环问题解决二 -- 环形链 ...

  6. 约瑟夫环 java代码_约瑟夫环算法的Java实现代码

    相信大家都知道这是一个的算法问题,约瑟夫环的c语言实现是利用了指针链表的形式,java实现呢,我的这个是用了内部类. 算法描述:n个人围成一圈,每人有一个各不相同的编号,选择一个人作为起点,然后顺时针 ...

  7. 约瑟夫环问题的两种解法(详解)

    约瑟夫环问题的两种解法(详解) 题目: Josephus有过的故事:39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓.于是决定了自杀方式,41个人排成一个圆 ...

  8. 求约瑟夫环问题最后胜利者的一般解法以及数学推导方法

    问题描述: 约瑟夫环问题(Josephus) 用户输入M,N值,从1至N开始顺序循环数数,每数到M输出该数值,直至全部输出.写出C程序. 解法一: 思路:建立一个有N个元素的循环链表,然后从链表表头遍 ...

  9. —— 约瑟夫环(自杀环)的数学解法

    首先简单介绍一下约瑟夫环: 约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围. 从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从 ...

  10. 约瑟夫环问题python解法_约瑟夫环问题python解法 | 学步园

    约瑟夫环问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围.从编号为k的人开始报数,数到k的那个人被杀掉:他的下一个人又从1开始报数,数到k的那个人又被杀掉:依此规律重复下去,直到 ...

最新文章

  1. HDU1232——通畅工程(并查集)
  2. 网页弹出框----播放视频
  3. 生成树的冗余与负载分担技术
  4. 企业《DHCP服务器群集》高级配置
  5. 趋势科技企业级杀软产品俩 0day 已遭利用
  6. 用Python生成测试数据
  7. eplices如何导入外部代码_搜索引擎的蜘蛛是如何爬的
  8. python字符串 切片_Python切片字符串
  9. import java.io用什么写_问问各位大佬,使用了fiilewrite,为什么写入不到文件
  10. linux 使用apidoc 生成Restful web Api文档
  11. 汇编环境搭建 Windows10 VS2019 MASM32
  12. 安装使用FLTK图形库
  13. 线序 RS232 RJ45 USB
  14. 【408预推免复习】计算机网络(谢希仁第七版)第三章——数据链路层
  15. OpenCV—python 角点特征检测之一(cornerHarris、Shi-Tomasi、FAST)
  16. 学习DNS,这一篇文章就够了
  17. 2005-04-28 把爸爸锁在阳台上
  18. Linux 系统调用深思:从原理到实战
  19. ASP.NET MVC4 音乐商店,Entity Framework 5.0
  20. c语言程序三角形实验报告,C语言程序设计实验报告(6)

热门文章

  1. pandas的基本函数
  2. orm php 自定义,Eloquent ORM 自定义 builder
  3. django mysql处理_利用Django去操作数据库并完成简易的登录及编辑功能
  4. 如何刷新linux的fdisk,②linux fdisk
  5. android异步任务框架,详解Android App中的AsyncTask异步任务执行方式
  6. java中volatile关键字_Java中Volatile关键字详解
  7. python基础:字符串操作
  8. 电脑上没有iis组件,怎么才能安装iis?
  9. 10年年初写的述职报告
  10. 蓝桥杯 前缀判断——2013年省赛C/C++A组真题5