约瑟夫环-猴子选大王(变型题)
接着上篇猴子选大王继续展开,上篇讲的是有m个猴子,从第一个猴子开始报数,当报到n时,第n个猴子出去,从n+1猴子开始,从1继续报数。

这篇我们来说,从任意猴子k的位置开始报数,当报到n时,第n个猴子出去,从n+1猴子开始,从1继续报数

问题描述:
约瑟夫环运作如下:

     1、一群猴子围在一起坐成环状(如:N)2、从某个编号开始报数(如:K)3、数到某个数(如:M)的时候,此猴出列,下一个猴子重新报数4、一直循环,直到所有猴子出列,约瑟夫环结束,同时输出最后的大王。

解题思路:

我们还是用循环链表解决,这里有两种方法,一种是根据上篇讲的那样,构造循环链表,利用循环操作将头指针指向第k个结点上,后续操作和上篇一样
代码如下:

 public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("请输入猴子数N: ");int n = sc.nextInt();System.out.println("请输入开始报数编号K: ");int k = sc.nextInt();System.out.println("请输入出列数M: ");int m = sc.nextInt();if(k > n || m > n) {System.out.println("编号K或者M不能大于猴子总数N");System.exit(0);}ListNode head = createListNode(n);while(k != 1){head = head.next;k--;}int count = 1;ListNode pre = null;while(head.next != head){pre = head;head = head.next;count++;if(count == m){System.out.println("当前出局人是: "+ head.val);pre.next = head.next;head = pre.next;count = 1;}}System.out.println("最后的大王是: "+ head.val);}public static ListNode createListNode(int m){ListNode head = new ListNode(1);if(m == 1) return head;ListNode cur = head;for(int i = 2;i <= m;i++){ListNode tmp = new ListNode(i);cur.next = tmp;cur = tmp;}cur.next = head;return head;}
}

另一种就是在构造循环链表过程中,直接将头指针定义为第k个猴子,后续操作和上篇代码一样。

 public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("请输入猴子数N: ");int n = sc.nextInt();System.out.println("请输入开始报数编号K: ");int k = sc.nextInt();System.out.println("请输入出列数M: ");int m = sc.nextInt();if(k > n || m > n) {System.out.println("编号K或者M不能大于猴子总数N");System.exit(0);}ListNode head = createListNode(n, k);int count = 1;ListNode pre = null;while(head.next != head){pre = head;head = head.next;count++;if(count == m){System.out.println("当前出局人是: "+ head.val);pre.next = head.next;head = pre.next;count = 1;}}System.out.println("最后的大王是: "+ head.val);}public static ListNode createListNode(int n,int k){ListNode head = new ListNode(k);ListNode cur = head;for(int i = k;i<n;i++){ListNode tmp = new ListNode(i + 1);cur.next = tmp;cur = tmp;}for(int i = 0;i<k - 1;i++){ListNode tmp = new ListNode(i + 1);cur.next = tmp;cur = tmp;}cur.next = head;return head;}

约瑟夫环-猴子选大王(变型题)相关推荐

  1. 约瑟夫环 猴子选大王

    <? /*** 猴子选大王:一群猴子排成一圈,按1,2,-,n依次编号.* 然后从第1只开始数,数到第m只,把它踢出圈,从它后面再开始数,再数到第m只,在把它踢出去-,* 如此不停的进行下去,直 ...

  2. 约瑟夫环 猴子选大王的问题

    问题: 有M只猴子围成一圈,按序每只从1到M中的编号,打算从中选出一个大王:经过协商,决定出选大王的规则:从第一个开始循环报数,数到N的猴子出圈,最后剩下来的就是大王.要求:从键盘输入M.N,编程计算 ...

  3. 约瑟夫问题(猴子选大王)

    n只猴子要选大王,选举方法如下:所 有猴子按 1,2 --- n 编号并按照顺序围成一圈, 从第 k 个猴子起,由1开始报数,报到m时,该猴子就跳出圈外, 下一只猴子再次由1开始报数, 如此循环,直到 ...

  4. 循环链表-约瑟夫问题-猴子选大王

    总时间限制(Time limit): 1000ms 内存限制(Memory limit): 65536kB 描述(Description) 有n只猴子,按顺时针方向围成一圈选大王(编号从1到n),从第 ...

  5. 猴子选王c语言链表程序代码,C语言程序设计-猴子选大王[链表应用]

    2032 猴子选大王 Description 有N只猴子,从1~N进行编号.它们按照编号的顺时针方向排成一个圆圈,然后从第一只猴子开始报数.第一只猴子报的第一个数字为1,以后每只猴子报的数字都是它们前 ...

  6. python猴子选大王_sicily 猴子选大王

    题目描述 猴子选大王,有N只猴子,从1-N进行编号.它们按照编号的顺时针方向,排成一个圆圈,然后从第一只猴子开始报数.第一只猴子报1,以后每只猴子报的数字都是它前面猴子所报数字加1.如果一只猴子报的数 ...

  7. 数据结构猴子选大王java_数据结构例子-猴子选大王

    约瑟夫问题(猴子选大王):   n只猴子要选大王,选举办法如下:所有猴子按1,2,-,n编号围坐一圈,从第一号开始按1,2,-,m报数,凡报m号的推出圈外,如此循环报数,直到圈内剩下一只猴子时,这只猴 ...

  8. 约瑟夫环问题之猴子选大王

    猴子选大王的描述为:n只猴子围成一圈,顺时针方向从1到n编号.之后从1号开始沿顺时针方向让猴子从1,2,...,m依次报数,凡是报到m的猴子,都让其出圈,取消候选资格.然后不停的按顺时针方向报数,让报 ...

  9. Python 猴子选大王(约瑟夫环)算法

    def KingElect(totalNum, startNum, intervalNum):'''猴子选大王totalNum:猴子总数tartNum:开始序号intervalNum:间隔数'''mo ...

最新文章

  1. 编程没基础学python多长时间--零基础学Python,从入门到精通需要多长时间
  2. 10分钟内把永远跑不完的存储过程变为2秒跑完
  3. Docker 常见问题 (FAQ)-2015
  4. C#使用ICSharpCode.SharpZipLib压缩后进行web批量下载文件
  5. 自己动手写CPU(7)转移指令的实现
  6. 计算机图形相关输出设备,计算机图形输出设备.ppt
  7. Unity3D手机斗地主游戏开发实战(02)_叫地主功能实现
  8. 一篇文章带你熟悉 TCP/IP 协议(网络协议篇二)
  9. 开关造成的毛刺_玻璃面板开关钻孔加工
  10. 管理后台--3,修改分类
  11. 一分钟让你了解蓝桥杯(电子类)单片机比赛规则
  12. python 运行报错 Process finished with exit code -1073740791 (0xC0000409)
  13. 美世家无线点菜android,美世家无线点菜成功实现iPad mini平台应用
  14. 2022-我的秋招之旅
  15. KNIME 安装配置
  16. C语言多线程之“哲学家就餐”问题
  17. 基于Pytorch的强化学习(DQN)之 Experience Replay
  18. 淘宝浏览足迹功能实现(含代码)--cookie案例
  19. 基于Neo4j中医方剂药材知识图谱大数据可视化分析系统的设计与开发
  20. mac微信小程序源代码找回

热门文章

  1. 五子棋源码 php,js实现五子棋代码分享
  2. 知乎日报 hello android,知乎日报 - 明白人说新鲜事 - Android 应用 - 【最美应用】...
  3. SnakeYaml反序列化
  4. ZYNQ_MP启动过程分析
  5. 【T3】用友畅捷通特殊行业的期间损益结转设置
  6. sqlserver数据库导入
  7. 数据看板用什么软件做比较好-九数云
  8. 【CET4四级英语】【单词】英语四级高频词汇(5)
  9. 国内外互联网地图常用的几种坐标系统:概念,原理和应用
  10. java中数组遍历的三种方式