`
bianku
  • 浏览: 72398 次
  • 性别: Icon_minigender_1
  • 来自: 常州
社区版块
存档分类
最新评论

Josephus 问题相关实现方法

    博客分类:
  • Java
 
阅读更多
#include <stdio.h> 
#include <stdlib.h> 
#define N 41 
#define M 3 

int main(void) { 
    int man[N] = {0}; 
    int count = 1; 
    int i = 0, pos = -1; 
    int alive = 0; 

    while(count <= N) { 
        do { 
            pos = (pos+1) % N;  // 環狀處理 
            if(man[pos] == 0) 
                i++; 

            if(i == M) {  // 報數為3了 
                i = 0; 
                break; 
            } 
        } while(1); 

        man[pos] = count; 
        count++; 
    } 

    printf("\n約琴夫排列:"); 
    for(i = 0; i < N; i++) 
        printf("%d ", man[i]); 

    printf("\n\n您想要救多少人?"); 
    scanf("%d", &alive); 

    printf("\nL表示這%d人要放的位置:\n", alive); 
    for(i = 0; i < N; i++) { 
        if(man[i] > alive) 
            printf("D"); 
        else 
            printf("L"); 

        if((i+1) % 5 == 0) 
            printf("  "); 
    } 
    printf("\n"); 

    return 0; 
}

 

public class Josephus {
    public static int[] arrayOfJosephus(
                               int number, int per) {
        int[] man = new int[number]; 

        for(int count = 1, i = 0, pos = -1; 
                count <= number; count++) { 
            do { 
                pos = (pos+1) % number;  // 環狀處理 
                if(man[pos] == 0) 
                    i++; 

                if(i == per) {  // 報數為3了 
                    i = 0; 
                    break; 
                } 
            } while(true); 

            man[pos] = count; 
        } 
        
        return man;
    }

    public static void main(String[] args) {
        int[] man = Josephus.arrayOfJosephus(41, 3);
        int alive = 3;
        
        System.out.println("約琴夫排列:"); 
        for(int i = 0; i < 41; i++) 
            System.out.print(man[i] + " "); 


        System.out.println("\nL表示3個存活的人要放的位置:"); 
        for(int i = 0; i < 41; i++) { 
            if(man[i] > alive) 
                System.out.print("D"); 
            else 
                System.out.print("L"); 

            if((i+1) % 5 == 0) 
                System.out.print("  "); 
        } 

        System.out.println();
    }
}

 

分享到:
评论

相关推荐

    Josephus 约瑟夫问题(POJ)

    数组法则是利用循环和索引来实现,既节省空间又具有较好的时间复杂度。 递归法的基本思想是,当只剩两个人时,最后存活的人是剩下的那一个;如果有n个人,则最后存活的人是第(f(n-1)+m) mod n个人,f(n)表示n个人时...

    基于Josephus问题的C语言教学设计分析.pdf

    函数则用于实现求解Josephus问题的算法,结构体可以用来存储子的相关信息,位运算可能在某些特殊要求的Josephus问题变形中发挥作用,而文件操作和测试则是整个教学设计中不可或缺的一部分,用以检验程序的正确性和...

    Josephus.java,是java课程的实验2 求解约瑟夫环问题.zip

    Java编程语言在教育领域被广泛用于教授计算机科学基础,其中一个经典的算法问题就是约瑟夫环(Josephus Problem)。这个题目源自一个古老的故事,涉及到在战争中存活下来的策略。在这个问题中,人们站成一个圈,并...

    约瑟夫问题的详解及实现

    约瑟夫问题(Josephus Problem)是一个著名的理论问题,源于古罗马时代的一个传说。问题的基本设定是:在圆形的队列中,人们按照顺时针方向依次报数,每报到特定数字的人会被排除出队,然后从下一个人重新开始报数,...

    Josephus.zip_数值算法/人工智能_Visual_C++_

    标题中的"Josephus.zip"指的是一个压缩包文件,其中包含了关于Josephus问题的实现。Josephus问题是一个经典的理论计算机科学问题,它源自一个历史故事,涉及到了数学和算法设计。在该问题中,人们站成一个圈,并按照...

    湖南科技大学数据结构课设.docx

    本报告是湖南科技大学计算机科学与工程学院第二学期数据结构课程设计报告,涵盖了多个数据结构和算法相关的知识点,包括复杂度分析、Josephus 问题、单词检查、后缀表达式求值、二叉树的创建和文本显示、表达式树的...

    约瑟夫生死游戏队列实现

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

    一个关于单链表的c++模板

    本文将深入探讨单链表的概念、实现以及与之相关的Josephus问题。 首先,单链表是一种线性数据结构,其中每个元素(节点)包含两部分:数据域存储实际的数据,而指针域指向链表中的下一个节点。链表不同于数组,数组...

    C语言编写的关于约瑟夫环问题的程序

    标题中的“C语言编写的关于约瑟夫环问题的程序”指的是使用C编程语言实现的一个经典算法问题——约瑟夫环(Josephus Problem)。约瑟夫环问题是一个理论上的问题,通常在计算机科学和数学中被用作示例,以讨论和解决...

    约瑟夫环 数据结构 题目

    约瑟夫环(Josephus Problem)是一个著名的理论问题,源于古罗马时期的传说,与数据结构和算法设计密切相关。在这个问题中,人们站成一个圈,并按照顺时针或逆时针顺序报数,每次数到特定数值的人会被排除出圈,然后...

    多个数据结构实验程序

    Josephus问题是一个著名的理论问题,涉及到环形链表和数学。在一定规则下,人们按顺序淘汰,最后剩下的人获胜。解决Josephus问题通常需要理解循环列表的结构,并应用适当的算法,如模运算和动态规划。 实验可能包括...

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

    约瑟夫环(Josephus Problem)是一个著名的理论问题,源于古罗马时代的一个传说。在这个问题中,人们站成一个圈,并按照某种顺序依次剔除,直到只剩下一个为止。该问题通常与计算机科学中的算法和递归理论相关。在这...

    Python实现约瑟夫环问题的方法

    ### Python 实现约瑟夫环问题的方法 #### 约瑟夫环问题描述 约瑟夫环问题(Josephus problem)是一个经典的理论计算机科学问题,它涉及到数学中的循环队列和递归等概念。该问题的基本场景是:一群人在玩一个游戏,...

    约瑟夫环的链表实现——数据结构

    约瑟夫环(Josephus Problem)则是一个著名的理论问题,它涉及到算法设计和问题解决策略。在这个问题中,人们站成一个圈,按照一定的规则每隔一定人数淘汰一个人,直到只剩下最后一个人为止。我们可以利用链表这种...

    2022年桂林电子科技大学全国硕士研究生招生考试自命题科目考试大纲

    * 图的深度优先周游和广度优先周游两类策略和实现方法 * 面向应用的核心算法实现与分析,包括 Prim 和 Kruskal 最小生成树算法、Dijkstra 和 Floyd 最短路径算法 * 面向特定应用的图形态,包括 AOV 网和 AOE 网 六...

    约瑟夫环各种实现(链表、公式)-数据结构作业

    约瑟夫环(Josephus Problem)是一个著名的理论问题,源于古罗马时代的一个传说。问题描述如下:人们站成一个圈,从某个人开始按顺时针方向计数,每数到特定数值的人会被排除出圈,然后从下一个人继续计数,直到只...

    C++编的约瑟夫环代码

    下面我们将深入探讨这个问题的解决方案以及相关的C++编程技术。 首先,我们可以使用递归方法来解决约瑟夫环问题。递归的基本思想是将问题分解为更小的子问题,直至子问题可以轻易解决。对于约瑟夫环,我们可以通过...

    poj1012-Joseph【经典约瑟夫问题】

    标题中的“poj1012-Joseph”是指北京大学在线编程平台POJ(Problemset Online Judge)上的一个问题编号为1012的题目,它与一个著名的算法问题——约瑟夫环(Josephus Problem)相关。约瑟夫环问题源自古罗马历史,是...

    塞瑟夫

    在ECEStuff-main这个文件夹中,可能包含了实现Josephus问题的JavaScript代码示例,以及相关的电子工程或计算机科学课程资料。这个文件夹名可能是某个项目、课程或研究的命名,其中的文件可能包括: 1. `index....

Global site tag (gtag.js) - Google Analytics