`
yangjueshe
  • 浏览: 6093 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
最近访客 更多访客>>
社区版块
存档分类
最新评论

约瑟夫

J# 
阅读更多

 约瑟夫出圈问题 两种方法实现,数据和链表 n个人围成一个圈,一个个首尾相连的圈报数,从第一个开始报数
 报到m的人出圈,剩下的人继续从1开始报数,直到所有人都出圈为止。

import java.util.LinkedList;
import java.util.Scanner;

/**
 * 约瑟夫出圈问题 两种方法实现,数据和链表 n个人围成一个圈,一个个首尾相连的圈报数,从第一个开始报数
 * 报到m的人出圈,剩下的人继续从1开始报数,直到所有人都出圈为止。
 * 
 * @author sesame.yangj
 */
public class Joseph {

    /**
     * @param args
     */
    public static void main(String[] args) {
        Joseph j = new Joseph();
        System.out.println("约瑟夫出圈");
        System.out.println("输入人数:");
        Scanner s = new Scanner(System.in);
        int n = s.nextInt();
        System.out.println("输入出圈的位置:");
        int m = s.nextInt();
        System.out.println("数组实现");
        j.arrayJoseph(n, m);
        System.out.println("链表实现");
        j.listJoseph(n, m);
    }

    /**
     * 用数组实现
     * 
     * @param n 总的人数
     * @param m 当前报的数
     */
    public void arrayJoseph(int n, int m) {
        //数组存储编号
        int array[] = new int[n];
        int len = n;
        for (int i = 0; i < array.length; i++) {
            array[i] = i + 1;
        }

        int i = 0;
        //当前报的数
        int j = 1;

        while (len > 0) {
            if (array[i % n] > 0) {
                //位置有人
                if (j % m == 0) {
                    //报到出圈的人
                    System.out.println(array[i % n]);
                    //为之置空
                    array[i % n] = -1;
                    //从1开始报数
                    j = 1;
                    i++;
                    len--;
                } else {
                    i++;
                    j++;
                }
            } else {
                //遇到空位
                i++;
            }
        }
    }

    /**
     * 用双向链表实现
     * 
     * @param n
     * @param m
     */
    public void listJoseph(int n, int m) {
        LinkedList<Integer> list = new LinkedList<Integer>();
        for (int i = 0; i < n; i++) {
            //添加数据,与编号对应
            list.add(i + 1);
        }
        int moved = 0;
        while (list.size() > 0) {
            moved = (moved + m - 1) % list.size();
            System.out.println(list.get(moved));
            list.remove(moved);
        }
    }
}

 

分享到:
评论
1 楼 yangjueshe 2009-11-02  
灰常经典java题目啊

相关推荐

    约瑟夫环实验报告

    从给定的文件信息来看,主要的信息点集中在标题和描述中,即“约瑟夫环实验报告”以及“用vc6.0环境实现的约瑟夫环的上机实验报告”。这部分信息涉及到计算机科学中的一个重要数据结构问题——约瑟夫环(Josephus ...

    基于mfc的约瑟夫环模拟器

    【约瑟夫环模拟器基于MFC的实现】 约瑟夫环问题,源自古罗马的一则历史传说,是一个经典的计算机科学问题,它涉及到循环链表和递归算法。在这个问题中,人们围成一个圈,从某个人开始按顺序报数,每次数到特定数字...

    约瑟夫环的mfc实例

    约瑟夫环问题,也称为约瑟夫环序列或约瑟夫问题,是一个著名的理论问题,源自古希腊的数学家约瑟夫·弗拉基米尔。这个问题的基本设定是:一个圆圈中的n个人按顺序编号,从第一个人开始报数,数到m的人将被剔除,然后...

    matlab解决约瑟夫问题

    ### MATLAB 解决约瑟夫问题 #### 知识点概览 1. **约瑟夫问题定义与背景** 2. **约瑟夫问题的一般算法介绍** 3. **MATLAB编程实现约瑟夫问题** - 变量定义与初始化 - 循环结构的应用 - 条件判断语句 - 数组操作...

    数据结构约瑟夫环实习报告

    约瑟夫环(Josephus Problem)是一个经典的理论问题,它在数据结构和算法的教学中常被用作实例,来展示链表、队列、栈等数据结构的应用。这个实习报告将深入探讨这个问题,并通过源代码进行实际实现。 约瑟夫环问题...

    约瑟夫环MFC窗体版

    《约瑟夫环MFC窗体版:深入理解与实现》 约瑟夫环问题,又称约瑟夫环算法(Josephus Problem),是计算机科学中一个经典的理论问题,源自一个古老的传说。这个问题在不同的编程环境中都有所应用,尤其是在数据结构...

    约瑟夫环问题算法

    约瑟夫环问题,也被称为约瑟夫环序列或约瑟夫问题,是一个著名的理论问题,源自古罗马的传说。该问题的基本设定是:一群囚犯围成一个圈,按照顺时针方向从某个人开始计数,每数到特定数值的人会被剔除出圈,然后从下...

    约瑟夫环代码及实验!!

    约瑟夫环问题是一个经典的计算机科学问题,源自一个古老的故事。在这个问题中,人们围成一个圈,并按顺序编号。每次从某个特定编号的人开始,每隔一定数量的人就会被排除,直到只剩下最后一个人为止。这个问题通常...

    数据结构 约瑟夫问题

    用循环单向链表解决约瑟夫问题 原题: 设有n个人站成一圈,每个人持有一个密码(正整数)。现从第t个人开始,按顺时针方向“1,2,3,4,…”循环报数,数到m1(第t个人所持密码)的人出列,然后从出列者的下一个人重新...

    数据结构 约瑟夫生死游戏

    约瑟夫生死游戏算法实现 数据结构中的约瑟夫生死游戏是一种经典的算法问题,旨在解决在某个圆环中,每个人的生死次序问题。该问题的解决方案主要基于单循环链表的数据结构和算法实现。 约瑟夫生死游戏的算法思想 ...

    约瑟夫生死游戏队列实现

    约瑟夫生死游戏,也被称为约瑟夫环问题(Josephus Problem),是计算机科学和算法设计中的一个经典问题。这个游戏源自一个古老的传说,涉及到在战争中被捕的士兵们站成一个圈,按照一定的规则每间隔一定人数淘汰一人...

    数据结构课程设计约瑟夫生死游戏

    "数据结构课程设计约瑟夫生死游戏" 本课程设计的标题是“数据结构课程设计约瑟夫生死游戏”,是数据结构课程设计的一部分,旨在训练学生的数据组织能力和提高程序设计能力。该设计的目的是学习数据结构课程,学会...

    约瑟夫环代码约瑟夫环(Josephus)问题是由古罗马的史学家约瑟夫(Josephus)提出的,他参加并记录了公元66—70年犹太人反抗罗马的起义。约瑟夫作为一个将军,设法守住了裘达伯特城达47天之久,在城市沦陷之后,他和40名死硬的将士在附近的一个洞穴中避难。在那里,这些叛乱者表决说“要投降毋宁死”。于是,约瑟夫建议每个人轮流杀死他旁边的人,而这个顺序是由抽签决定的。约瑟夫有预谋地抓到了最后一签,并且,作为洞穴中的两个幸存者之一,他说服了他原先的牺牲品一起投降了罗马。

    ### 约瑟夫环(Josephus)问题详解与实现 #### 一、问题背景及定义 约瑟夫环问题源自古罗马时期的历史事件。据史学家约瑟夫记载,在公元66年至70年间,犹太人反抗罗马统治期间,约瑟夫和他的40名部下在裘达伯特城...

    约瑟夫环(链表实现)

    "约瑟夫环(链表实现)" 约瑟夫环是一种经典的算法问题,它的主要思想是使用链表来模拟一个环形结构,然后通过遍历这个环形结构来实现约瑟夫环的操作。下面我们将详细介绍约瑟夫环的链表实现。 首先,我们需要定义...

    Josephus 约瑟夫问题(POJ)

    《约瑟夫问题详解及其在POJ中的应用》 约瑟夫问题,源自古罗马历史的一个有趣的故事,是由数学家约瑟夫·弗拉基米尔提出的。问题的基本设定是:一群人站成一个圆圈,从某人开始按顺时针方向计数,每数到特定数值的...

    vc编写的约瑟夫环实验报告

    《VC实现约瑟夫环:链式与顺序表解析》 约瑟夫环问题,源自古罗马的一个传说,是一个经典的计算机科学问题。在VC++环境下,我们可以通过编程来解决这个问题,既可以采用链式存储结构,也可以使用顺序存储结构。本...

    约瑟夫环c++语言编程

    根据给定的文件信息,我们可以总结出以下关于“约瑟夫环C++语言编程”的相关知识点: ### 一、约瑟夫环问题介绍 约瑟夫环(Josephus Problem)是一个经典的理论计算机科学问题,源自古罗马时期的数学家约瑟夫斯·...

    约瑟夫环代码 c语言约瑟夫

    ### 约瑟夫环问题及其C语言实现 #### 一、约瑟夫环问题概述 约瑟夫环(Josephus Problem)是一个经典的数学问题,它涉及到一系列人在一个圈中根据特定规则依次“出列”的过程。具体描述如下: 1. **初始条件**:...

    约瑟夫环数据结构实验报告.doc

    【约瑟夫环数据结构实验】是数据结构课程中一个经典的问题,主要涉及线性表的存储结构——单向循环链表。实验的目标是模拟约瑟夫环问题,即若干人围成一圈按顺时针方向报数,报到特定数字的人出列,然后下一轮重新...

    数据结构--约瑟夫环算法描述

    约瑟夫环(Josephus Problem)是一个著名的理论问题,源于公元前一世纪的犹太历史学家约瑟夫·弗拉维乌斯所描述的故事。在该问题中,人们站成一个圈,从某个人开始计数,每数到特定数字的人会被排除出圈,然后继续从...

Global site tag (gtag.js) - Google Analytics