Java实现约瑟夫环问题「建议收藏」

Java实现约瑟夫环问题「建议收藏」约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3…n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。/***@author16026**/importjava.util.ArrayList;importjava.util.List;

大家好,又见面了,我是你们的朋友全栈君。

约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3…n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。


/** * @author 16026 * */
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Yue { 
   
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入总人数:");
        int totalNum = scanner.nextInt();
        System.out.print("请输入报数的大小:");
        int cycleNum = scanner.nextInt();
        yuesefu(totalNum, cycleNum);
        scanner.close();
    }

    public static void yuesefu(int totalNum, int countNum) {
        // 初始化人数
        List<Integer> start = new ArrayList<Integer>();
        for (int i = 1; i <= totalNum; i++) {
            start.add(i);
        }
        // 从第K个开始计数
        int k = 0;
        while (start.size() > 0) {
            k = k + countNum;
            // 第m人的索引位置
            k = k % (start.size()) - 1;
            // 判断是否到队尾
            if (k < 0) {
                System.out.println(start.get(start.size() - 1));
                start.remove(start.size() - 1);
                k = 0;
            } else {
                System.out.println(start.get(k));
                start.remove(k);
            }
        }
    }
}

这里写图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/136223.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • 红黑树和平衡二叉树有什么区别?「建议收藏」

    红黑树和平衡二叉树有什么区别?「建议收藏」什么是二叉树?二叉树(BinaryTree)是指每个节点最多只有两个分支的树结构,即不存在分支大于2的节点,二叉树的数据结构如下图所示这是一棵拥有6个节点深度为2(深度从0开始),并且根节点为3的二叉树二叉树有两个分支通常被称作“左子树”和“右子树”,而且这些分支具有左右次序不能随意地颠倒一棵空树或者满足以下性质的二叉树被称之为二叉查找树若任意节点的左子树不为空,则左子树上所有节点的值均小于它的根节点的值; 若任意节点的右子树不为空,则右子树上所有节点的值均大

    2022年9月25日
  • sql server 字符串和日期的转换函数[通俗易懂]

    sql server 字符串和日期的转换函数[通俗易懂]字符串转换为日期:cast(‘20100514’asdatetime)日期转换为字符串:CONVERT(nvarchar(30),GETDATE(),126)日期格式规则如下:1101美国mm/dd/yyyy2102ANSIyy.mm.dd3103英国/法国dd/mm/yy4104德国dd.mm.yy5105意大利dd-m

    2022年10月8日
  • 开启Mac os系统原生的NTFS读写功能「建议收藏」

    开启Mac os系统原生的NTFS读写功能「建议收藏」开启Macos系统原生的NTFS读写功能早期的MacOS是可以通过修改mount_ntfs指令实现的。但是10.5以后的版本都不可以编译了,打开是乱码。只能说微软霸道。后来只能用激活成功教程版的ParagonNTFSforMAC,但是更新Macos系统之后老版的Paragon激活成功教程版就不能用了。后来找到了Mounty这个软件,免费里的精品,用了好一段时间,而且更新系统还能用,但是在使用时遇到…

    2022年6月29日
  • java se与java 的区别_java se与java的区别是什么

    java se与java 的区别_java se与java的区别是什么Java是一门程序设计语言,它有三个版本,JavaSE(标准版)、JavaEE(企业版)和JavaME(微型版)。而JavaSE只是一个使用Java进行编程的规范、框架,它不是一门编程语言。JavaSE(javastandardedition),一般包括jdk、jre以及各种API文档等。JavaSE(JavaPlatform,StandardEdition)。JavaSE以…

    2022年7月9日
  • 开撕!赛门铁克抨击 Google 夸大其词误导用户「建议收藏」

    开撕!赛门铁克抨击 Google 夸大其词误导用户

    2022年3月3日
  • mysql添加字段的sql语句_mysql增加字段的语句

    mysql添加字段的sql语句_mysql增加字段的语句myesl是一个关系型数据库管理系统,也是目前最流行的管理系统之一,目前网页设计方面对一个系统的使用频率是比较高的,因此想要学会网页设计,那么有关myesl的基础知识以及应用就一定要掌握。而今天我们就来看一看myesl增加字段是如何操作的。mysql增加字段——mysql数据库更新字段语句一、UPDATE:UPDATE的功能是更新表中的数据。这的语法和INSERT的第二种用法相似。必须提供表名以及…

    2022年10月26日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号