标签:Node head addNode temp int Josephu next 问题 约瑟夫
Description
约瑟夫问题:有n个人,按顺时针方向围成一圈(编号从1到n),从第1号开始报数,一直数到m,数到m的人退出圈外,剩下的人再接着从1开始报数。,编程求输入n,m后,输出出圈的序号。
Input
每行是用空格分开的两个整数,第一个是 n, 第二个是 m ( 0 < m,n <=300)。最后一行是:0 0
Output
输出出队的队列
package datastruct.josephu; public class Josephu { public static void main(String[] args) { // 首先找到 第一个节点的前一个节点。 Node head = new Node(1); head.addNode(2).addNode(3).addNode(4).addNode(5).addNode(6).addNode(7).addNode(8).next = head; jsephuResult(head, 8, 3); } public static void jsephuResult(Node head, int n, int m) { // step 1: 找到第一个节点的前一个节点 Node temp = head; while (temp.next != head) { temp = temp.next; } while (temp.next != temp) { for (int i = 0; i < m - 1 && head.next != head; i++) { temp = temp.next; } // output and delete node System.out.println(temp.next.value); temp.next = temp.next.next; } System.out.println(temp.value); } } class Node { Node next = null; int value; Node(int v) { value = v; } Node addNode(int value) { Node nextNode = new Node(value); this.next = nextNode; return nextNode; } }
标签:Node,head,addNode,temp,int,Josephu,next,问题,约瑟夫 来源: https://www.cnblogs.com/feihu-h/p/12641608.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。