约瑟夫算法(数学分析法)

约瑟夫算法(数学分析法)

大家好,又见面了,我是全栈君,祝每个程序员都可以多学几门语言。

//看了帖子后认为有趣就实现了一把递归的约瑟夫算法

  

package test;

/**
 * 500个小孩围成一圈,从第一个開始报数:1,2,3,1,2,3,1,2,3,……每次报3的小孩退出
	 问最后剩下的那个小孩,在曾经500人里是第几个???
 */
public class Test {

	/**
	 * 约瑟夫标准循环非递归解法 
	 * @param n
	 * @param m
	 * @return
	 */
	public static int f2(int n, int m){
		
		int index = 0;
	    for (int i = 2; i <= n; i++) {
	        index = (index + m) % i;
	    }
		return index +1;
	}
	
	/**
	 * 约瑟夫递归算法
	 * @param n
	 * @param m
	 * @return 返回的结果+1 = 终于结果
	 */
	public static int f(int n,int m){
		
		int t = 0;
		if(n==1){
			return t;
		}else{
			t = ( f(n-1, m) + m)%n;
		}
		return t;
		
	}

	
	public static void main(String[] args) {
		//	
		int n = 500;
		int m = 3;
		
		//约瑟夫标准循环非递归解法 
		System.out.println(f2(n, m));//此方法来自帖子
		
		/*
		(函数)index表示(变量)n个人玩游戏报(常量)m退出最后胜利者的编号.则有递推公式:
		index(1) = 0;
		index(n) = (index(n-1) + m)%n;   (n>1)
		这个公式不是仅仅考虑一种场景得出的结果,而是抽象出普遍的n得出的结论,
		
		*/
		/*
		 *f(1) = 0;//第0个
		 *f(2) = 1;//第1个
		 *f(3) = 1;//第2个
		 * */
		//參考上面的提示写了下约瑟夫的递归算法
		System.out.println(f(n, m)+1);
		
		
	}
	
	
}

今天看到一个LinkedList版本号的,測试了,结果一样,补充上:

public static int removeNM(int n, int m) {   
        LinkedList ll = new LinkedList();   
        for (int i = 0; i < n; i++)   
            ll.add(new Integer(i + 1));   
        int removed = -1;   
        while (ll.size() > 1) {   
            removed = (removed + m) % ll.size();   
            System.out.println("出列:"+(ll.get(removed)));
            ll.remove(removed--);   
        }   
        return ((Integer) ll.get(0)).intValue();   
    } 

打印结果:

436

436

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

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

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


相关推荐

  • Semantic Drone Dataset(语义无人机数据集)使用方法「建议收藏」

    Semantic Drone Dataset(语义无人机数据集)使用方法「建议收藏」数据集介绍SemanticDroneDataset数据集下载地址该语义无人机数据集专注于城市场景的语义理解,以提高无人机自主飞行和着陆程序的安全性。该图像描绘了在距地面5至30米的高度从最低点(鸟瞰)视角拍摄的20多座房屋。高分辨率相机用于获取尺寸为6000x4000px(24Mpx)的图像。训练集包含400张公开可用的图像,测试集包含200张私有图像。该语义分割数据集包括20个种类:树、草、其他植被、污垢、碎石岩石、水、铺砌面积、水池、人狗、车、自行车、屋顶、墙

    2022年8月15日
    4
  • Linux基础篇——Linux磁盘操作(磁盘基础知识、分类、分区、挂载、卸载、扩容)详解「建议收藏」

    Linux基础篇——Linux磁盘操作(磁盘基础知识、分类、分区、挂载、卸载、扩容)详解「建议收藏」目录1.概念1.概念图1.1分区的概念与好处  假如你有个大木桶要装东西,如果木桶没有划分层,所有东西全部放入里面,虽然可以装,但是对大木桶的使用就合不合理,造成杂乱无章,寻找东西时候也耗时,甚至还有不同物品之间不能存放在一起而导致危险,那更好的做法自然是给大木桶画一下不同的区域,分成不同的层,每个层放不同的东西,即安全,寻找起来也方便;  计算机的磁盘(也叫硬盘)也是如此,为了区分存储内容的不同,以及快速定位寻址文件,也需要采取分区的形式;…

    2022年5月25日
    32
  • pycharm突然打不开到底什么情况_pycharm运行没反应

    pycharm突然打不开到底什么情况_pycharm运行没反应当无法打开pycharm终端,出现以下情况1、打开pycharm设置2、打开一下界面3、在shell路径中选择windows下的cmd.exe,这样就可以将cmd命令路径连接到pycharm中,无法打开windows终端即可方便下载安装包4、重新启动pycharm…

    2022年8月26日
    2
  • VS2010 中文版MSDN下载

    VS2010 中文版MSDN下载VS2010距发布已经有快两个月了,一直苦等的VS2010中文版终于出现了,灰太狼最近有点忙发现的还有点晚,现在马上提供给大家VS2010中文版的MSDN下载资源。VS2010中文版MSDN下载地址请访问:VS2010中文版MSDN下载转载于:https://www.cnblogs.com/rocky99261/archive/2010/06/03/1751003.html…

    2022年7月16日
    8
  • SpringMVC+Spring+Mybatis实现登录注册Demo「建议收藏」

    SpringMVC+Spring+Mybatis实现登录注册Demo「建议收藏」使用环境:MyEclipse/Eclipse+Tomcat+MySql。使用技术:SpringMVC+Spring+Mybatis。实现效果登录页面:密码错误提示登录成功后注册注册成功目录结构一、配置文件beans.xml<?xmlversion=”1.0″encoding=”UTF-8″?><beansxmlns=”http://www.springframework.org/schema/beans”xmlns:x.

    2022年4月30日
    56
  • 分布式系统的 CAP 定理

    分布式系统的 CAP 定理CAP定理指出,在一个分布式系统中,对于一致性、可用性、分区容错这三个特性,不可能同时满足,而是必须有所舍弃。我们设计分布式系统时,必须在三者之间(尤其是一致性和可用性之间)有所取舍和平衡。作者:王克锋出处:https://kefeng.wang/2018/07/26/distributed-cap/版权:自由转载-非商用-非衍生-保持署名,转载请标明作者和出处。1概述…

    2025年7月20日
    0

发表回复

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

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