java 约瑟夫_基于java的约瑟夫杀人问题算法解析

2023-11-06 09:50

本文主要是介绍java 约瑟夫_基于java的约瑟夫杀人问题算法解析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、需求

实现约瑟夫杀人算法

二、代码实现过程

代码实现过程:详情请看的我的csdn博客

1.数据结构部分:

我们将问题抽象提取一下,首先我们需要一个节点来储存单个俘虏的信息,然后我们需要一个环状来表示所有的俘虏,然后再写算法,

2.算法部分:

算法具体实现:可以先用一个计数器,从开始遍历环开始计数,到计数器等于M时,进行删除节点。

3.代码构建:

由于是运用java语言描述,所以单独将节点和算法分别抽象成一个类

3.1构建节点类public class Node {

//定义为私有属性便于便方法调用时好管理

private int value;//节点的值

private Node nextNode;//节点的指向(递归思想)

public Node(int value) {

this.value=value;

}

public Node() {

super();

}

public int getValue() {

return value;

}

public void setValue(int value) {

this.value = value;

}

public Node getNextNode() {

return nextNode;

}

public void setNextNode(Node nextNode) {

this.nextNode = nextNode;

}

}

3.2 具体算法类public class Joseph {

private static int MAXNUM;//俘虏总人数

private static int NUM;//从那个开始杀(M)

//提供有参构造方法方便用户自定义俘虏总人数,和M

public Joseph(int MAXNUM,int NUM) {

this.MAXNUM=MAXNUM;

this.NUM=NUM;

}

//算法的主要实现部分

public void kill() {

//构造链表(初始化链表)

Node head=new Node(1);

Node x=head;

for(int i=2;i<=MAXNUM;i++){

x.setNextNode(new Node(i));

x=x.getNextNode();

}

//使链表为循环链表

x.setNextNode(head);

while(x!=x.getNextNode()){

for(int i=1;i

x=x.getNextNode();

}

System.out.println("宝贝你被杀了哟:"+x.getNextNode().getValue());

//删除节点

x.setNextNode(x.getNextNode().getNextNode());

}

System.out.println("宝贝已经杀完了!!!你是最后的幸运儿哟:"+x.getValue());

}

}

3.3 测试类import java.util.Scanner;

public class TextMain {

public static void main(String[] args) {

System.out.println("请输入俘虏的总人数");

Scanner scanner=new Scanner(System.in);

int MAXNUM=scanner.nextInt();

System.out.println("请输入从第几个开始杀");

int NUM=scanner.nextInt();

Joseph joseph=new Joseph(MAXNUM,NUM);

joseph.kill();

}

}

三、项目文件结构

8c8f641664fd162c56db857c35598bed.png

四、运行效果

b29ce48fe8e9707b04ba038faf0874ad.png

五、其他补充

约瑟夫问题定义

这篇关于java 约瑟夫_基于java的约瑟夫杀人问题算法解析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/355897

相关文章

一文详解如何在idea中快速搭建一个Spring Boot项目

《一文详解如何在idea中快速搭建一个SpringBoot项目》IntelliJIDEA作为Java开发者的‌首选IDE‌,深度集成SpringBoot支持,可一键生成项目骨架、智能配置依赖,这篇文... 目录前言1、创建项目名称2、勾选需要的依赖3、在setting中检查maven4、编写数据源5、开启热

python常见环境管理工具超全解析

《python常见环境管理工具超全解析》在Python开发中,管理多个项目及其依赖项通常是一个挑战,下面:本文主要介绍python常见环境管理工具的相关资料,文中通过代码介绍的非常详细,需要的朋友... 目录1. conda2. pip3. uvuv 工具自动创建和管理环境的特点4. setup.py5.

全面解析HTML5中Checkbox标签

《全面解析HTML5中Checkbox标签》Checkbox是HTML5中非常重要的表单元素之一,通过合理使用其属性和样式自定义方法,可以为用户提供丰富多样的交互体验,这篇文章给大家介绍HTML5中C... 在html5中,Checkbox(复选框)是一种常用的表单元素,允许用户在一组选项中选择多个项目。本

Java对异常的认识与异常的处理小结

《Java对异常的认识与异常的处理小结》Java程序在运行时可能出现的错误或非正常情况称为异常,下面给大家介绍Java对异常的认识与异常的处理,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参... 目录一、认识异常与异常类型。二、异常的处理三、总结 一、认识异常与异常类型。(1)简单定义-什么是

SpringBoot项目配置logback-spring.xml屏蔽特定路径的日志

《SpringBoot项目配置logback-spring.xml屏蔽特定路径的日志》在SpringBoot项目中,使用logback-spring.xml配置屏蔽特定路径的日志有两种常用方式,文中的... 目录方案一:基础配置(直接关闭目标路径日志)方案二:结合 Spring Profile 按环境屏蔽关

Python包管理工具核心指令uvx举例详细解析

《Python包管理工具核心指令uvx举例详细解析》:本文主要介绍Python包管理工具核心指令uvx的相关资料,uvx是uv工具链中用于临时运行Python命令行工具的高效执行器,依托Rust实... 目录一、uvx 的定位与核心功能二、uvx 的典型应用场景三、uvx 与传统工具对比四、uvx 的技术实

Java使用HttpClient实现图片下载与本地保存功能

《Java使用HttpClient实现图片下载与本地保存功能》在当今数字化时代,网络资源的获取与处理已成为软件开发中的常见需求,其中,图片作为网络上最常见的资源之一,其下载与保存功能在许多应用场景中都... 目录引言一、Apache HttpClient简介二、技术栈与环境准备三、实现图片下载与保存功能1.

SpringBoot排查和解决JSON解析错误(400 Bad Request)的方法

《SpringBoot排查和解决JSON解析错误(400BadRequest)的方法》在开发SpringBootRESTfulAPI时,客户端与服务端的数据交互通常使用JSON格式,然而,JSON... 目录问题背景1. 问题描述2. 错误分析解决方案1. 手动重新输入jsON2. 使用工具清理JSON3.

java中long的一些常见用法

《java中long的一些常见用法》在Java中,long是一种基本数据类型,用于表示长整型数值,接下来通过本文给大家介绍java中long的一些常见用法,感兴趣的朋友一起看看吧... 在Java中,long是一种基本数据类型,用于表示长整型数值。它的取值范围比int更大,从-922337203685477

java Long 与long之间的转换流程

《javaLong与long之间的转换流程》Long类提供了一些方法,用于在long和其他数据类型(如String)之间进行转换,本文将详细介绍如何在Java中实现Long和long之间的转换,感... 目录概述流程步骤1:将long转换为Long对象步骤2:将Longhttp://www.cppcns.c