`
ljmdbc7a
  • 浏览: 52643 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
社区版块
存档分类
最新评论

Java实现循环列表,解决约瑟夫环问题

    博客分类:
  • java
阅读更多

约瑟夫环:共有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为尾结点)
2
2
分享到:
评论

相关推荐

    Java求约瑟夫环问题.docx

    约瑟夫环问题 Java 实现详解 约瑟夫环问题是一个经典的数学问题,描述如下:有 n 个人围成一圈,从第一个人...了解约瑟夫环问题的 Java 实现可以帮助我们更好地理解递推问题的解决方法,并且可以应用于实际项目中。

    解决约瑟夫算法问题

    两种方法都是基于循环和计数的策略来解决约瑟夫环问题。集合实现更便于元素的添加和删除,而数组实现则更适合直接操作元素值。这两种方法都可以有效地找到约瑟夫环问题的解,但效率上,数组实现可能会稍微快一些,...

    基于Java的实例源码-约瑟夫环演示Applet源码.zip

    1. `JosephusProblem` 类:这是主类,用于初始化问题并调用解决问题的函数。 2. `Person` 类:代表参与约瑟夫环的人,可能包含编号等属性。 3. `removeEveryNth` 函数:这是一个核心函数,用于从列表中移除每N个人,...

    Java约瑟夫环演示Applet源码

    Java约瑟夫环(Josephus Problem)是一种经典的理论问题,源于古罗马的一种传说。在编程领域,它通常被用来展示循环、链表操作以及算法设计。在这个Java Applet程序中,我们将探讨如何用Java实现约瑟夫环的算法,并...

    约瑟夫的实现 java

    Java编程语言是实现约瑟夫问题的常见选择,因为它具有强大的面向对象特性以及丰富的库支持。 在提供的压缩包文件中,我们有三个文件:TestJoseph.java、Ele.java 和 Joseph.java。这些文件可能分别代表测试类、元素...

    约瑟夫环

    在Java语言中,约瑟夫环可以通过循环链表来实现。循环链表是一种特殊类型的链表,其中最后一个节点的next指针指向头节点,形成一个闭环。在约瑟夫环问题中,我们首先创建一个包含所有参与者的链表,然后通过迭代的...

    约瑟夫环的三种解法JosephRing-master.zip

    约瑟夫环问题,也称为约瑟夫环序列或约瑟夫问题,是一个著名的理论问题,源自古罗马历史上的一个故事。在这个问题中,人们围成一个圈,并按顺时针或逆时针顺序报数,每当报到特定数字的人会被移出圈子,然后从下一个...

    不同的方式实现约瑟夫环joseph-master.zip

    在这个"joseph-master.zip"压缩包中,很可能包含了不同编程语言或算法实现的约瑟夫环解决方案。 约瑟夫环问题的基本形式是这样的:假设n个人围成一圈,从第一个人开始报数,每报到m的人将被剔除,然后从下一个人...

    约索夫环资料

    总的来说,约索夫环问题是一个有趣的组合问题,它展示了数学和计算机科学在解决问题时的巧妙结合,同时也为我们提供了一个研究和实践算法的良好平台。通过理解和解决约索夫环,我们可以深化对递归、链表、数组以及...

    约瑟夫问题

    问题的核心是模拟一个循环列表,其中的元素(在这里是人)按照特定规则被删除,直到只剩下一个元素为止。 在原始问题中,N个人围成一个圈,并从第一个人开始顺时针报数。每当数到M时,这个人就会被淘汰出局,然后从...

    约瑟夫问题(环中有一个做杀手,即每次都跳过)

    约瑟夫问题,又称为约瑟夫环问题,是一个经典的理论问题,源于古希腊的数学家约瑟夫·弗朗西斯提出的。这个问题通常描述为:假设有一群人围成一个圆圈,从某个人开始计数,每数到特定数值的人就会被排除,然后从下一...

    POJ.rar_poj java_poj1048

    【标题】"POJ.rar_poj java_poj1048" 涉及的知识点主要围绕编程竞赛中的“约瑟夫环”问题,这里是一个加强版,使用Java语言进行解决。 【描述】"POJ1048,加强版的约瑟夫问题 难度中等" 提示我们,这个问题是编程...

    test11.9_java_

    标题 "test11.9_java_" 暗示...综上所述,解决“约瑟夫环”问题需要理解基本的数据结构、循环控制和条件判断,这都是Java编程的基础知识。通过实现这样的程序,不仅可以锻炼编程技能,也能加深对算法和数据结构的理解。

    【Java数据结构与算法】环形链表及约瑟夫问题

    解决约瑟夫问题的关键在于使用循环链表。首先,我们需要创建一个包含n个节点的环形链表,每个节点代表一个人,其编号为从1到n。然后,我们设置一个指针从k号节点开始,每次移动m-1步,到达的节点将被删除,接着从被...

    韩顺平java讲解文档

    第十一讲的约瑟夫问题是一个经典的算法问题,通过解决它,学习者可以加深对递归和循环的理解。 第十二讲和第十三讲涉及多态和抽象类、接口。多态是面向对象的重要特性,允许使用父类类型的引用操作子类对象。抽象类...

    我的数据结构实验报告.doc

    1. **约瑟夫问题**:这是一个著名的数学问题,涉及到循环链表的使用。在问题描述中,n个人围成一圈,按照顺时针方向从1开始报数,当数到m的人出列,然后从下一个人继续开始报数,直到所有人都出列。这个问题可以通过...

    java入门教程

    约瑟夫问题是一个经典的算法问题,涉及循环数组和递归,常用于练习和面试。 11. **多态性** 多态性是Java面向对象编程的重要特性,允许子类对象替换父类对象,调用父类方法时执行子类的实现。 12. **接口和抽象...

    达内 coreJava 习题答案

    import java.util.Scanner; class Bissextile{ public static void main(String[] arge){ System.out.print("请输入年份"); int year; //定义输入的年份名字为“year” Scanner scanner = new Scanner(System.in...

    yosep-kotlin-algorithm:t리즘제를kotlin으로풀다。 Kotlin

    解决约瑟夫环问题,通常采用递归或循环数据结构,如链表或数组。在Kotlin中,我们可以使用循环来实现这一算法。首先,我们需要创建一个表示参与者的列表,然后通过一个循环来模拟报数过程。每次报数时,我们会移除...

Global site tag (gtag.js) - Google Analytics