约瑟夫环:共有n个人围成一圈,从1开始报数,数到m的人出圈,求最后幸运者序号??
下面用java实现循环列表解决这个问题:
package com.iteye.ljmdbc7a;
import java.util.Scanner;
/**
* 循环列表的Java实现,解决约瑟夫环问题
* @author LIU
*
*/
public class LinkedList
{
//定义结点,必须是static
static class Node
{
int data;
Node next;
Node(int arg1)
{
this.data = arg1;
}
}
public static void main(String[] args)
{
int n = 0,m = 0;//定义总人数n,和出圈数字m
//输入n和m
System.out.println("输入总人数n,出圈数字m");
Scanner scanner = new Scanner(System.in);
n = scanner.nextInt();
m = scanner.nextInt();
//初始化循环列表,头结点first和尾结点p
Node first = new Node(1);
first.next = first;
Node p = first;
for(int i=2; i<=n; i++)
{
Node temp = new Node(i);
temp.next = p;
p.next = temp;
p = p.next;
}
p.next = first;//尾接头形成循环链表(p为尾结点)
//执行出圈操作
System.out.println("出圈顺序为:");
while(p != p.next)
{
//下面for循环后,p是第m个结点的前一个结点
for(int i=1; i<m; i++)
p = p.next;
//删除第m个结点
System.out.print(p.next.data+" ");
p.next = p.next.next;
}
System.out.print("\n幸运者是:"+p.data);
}
}
注意42行->>>>p.next = first;//尾接头形成循环链表(p为尾结点)
分享到:
相关推荐
循环链表 实现约瑟夫环 java 自己写的 测试通过 有注释
使用c语言中的循环链表及结构体实现约瑟夫环问题
用循环队列解决约瑟夫环问题减少用顺序表在出对是循环移动带来的空间复杂度
java解决约瑟夫环问题
用数据结构循环队列实现约瑟夫环问题,数据结构的一次实验;
用双向循环链表解决约瑟夫环问题的程序清单
约瑟夫环是一个数学的应用问题: ...网上看到很多实现,唯独Java实现不好找,自己构思了一下思路,用递归的方式实现了一个Java版的约瑟夫问题解决方案,代码简洁,思路清晰,请各位同行参考,欢迎交流。
用单链表解决约瑟夫环问题,数据结构实验报告。约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人...
多种方法解决约瑟夫环问题,1.顺序表2.循环链表3.循环队列4.普通一位数组
单链表解决约瑟夫环问题
java实现约瑟夫环问题Josephus 约瑟夫问题 * 已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k(1,2,3...n)的人开始报数,数到m(1,2,3...)的那个人出列; * 他的下一个人又从1开始报数,...
通过循环链表实现约瑟夫环问题,用c语言实现。属于数据结构部分内容
约瑟夫环问题Java代码实现 详细介绍了约瑟夫环问题 以及java的代码实现
循环队列求解约瑟夫环问题,C语言源文件供有需要的小白参考
问题描述:已经n个人(以编号1,2,3,…,n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部...
约瑟夫环java实现
java用数组实现的约瑟夫环问题。代码简单易懂。
用JAVA实现约瑟夫环
一开始任选一个正整数作为报数上限值m,从第一个仍开始顺时针方向自1开始顺序报数,报到m时停止报数。报m的人出列,将他的密码作为新的m值,从他在顺时针方向的下一个人开始重新从1报数,如此下去,直到所有人全部...
约瑟夫环 问题描述:约瑟夫问题的一种描述是:编号为1,2,…,n的n个人按顺时针方向围坐一圈,每人持一个密码(正整数)。一开始任选一个正整数作为报数上限值m,从第一个人开始按顺时针方向自1开始顺序报数,报到...