约瑟夫环(java)
问题描述:n个人围成一圈,每隔k个杀死一个,问最后的幸存者的编号
假设标号是0 ~ n-1,幸存者是f[n]
1、特殊情况:f[1]=0
2、一般情况:f[n] = (f[n-1]+k)%n
游戏开始时排序:
0、1、2、3、4、5、6、7、8……n-1
第一次被杀死的人的标号是k-1,还剩下n-1个人,此时的排序是:
k、k+1、k+2、k+3……n-1、0、1、2……k-3、k-2
重新排序:
0、1、2、3……n-5、n-4、n-3、n-2
private static int josephus(int n, int m) {
if (n == 1) {
return 0;
} else {
return (josephus(n - 1, m) + m) % n;
}
}
问题描述:n个人围成一圈,从第一个开始报数,第i次报数时,报到i的出局,问最后的幸存者的编号
假设标号是0 ~ n-1,幸存者是f[n, k]
1、特殊情况:f[1]=0
2、一般情况:f[n, k] = (f[n-1, k+1]+k)%n
例:
| 1次 | 0 1 2 3 4 5 6 | n=7,k=1,+1)%7 |
|---|---|---|
| 2次 | 1 2 3 4 5 6 \\ 0 1 2 3 4 5 | n=6,k=2,+2)%6 |
| 3次 | 2 3 4 5 0 \ 0 1 2 3 4 | n=5,k=3,+3)%5 |
| 4次 | 3 4 0 1 \ 0 1 2 3 | n=4,k=4,+4)%4 |
| 5次 | 0 1 2 \ 0 1 2 | n=3,k=5,+5)%3 |
| 6次 | 原2 0 \ 现0 1 | n=2,k=6,+6)%2 |
| 7次 | 0 |
比如,f(3,5)=(f(2,6)+5)%3 若f(2,6)现在的数字是0,则原来数字是2
private static int josephus_(int n, int m) {
if (n == 1) {
return 0;
} else {
return (josephus_(n-1, m+1) + m) % n;
}
}
约瑟夫环(java)的更多相关文章
- j使用数组实现约瑟夫环 java
我们首先来看一下约瑟夫环问题: 给定m个人,m个人围成一圈,在给定一个数n,从m个人中的第一个人每第n个人便将其除去,求被最后一个出去的人的编号. 思路: 建立一个长度为m+1的数组,将其的内容初始化 ...
- 约瑟夫环 java实现
问题: N个人从1到N编号.围城一圈,从1開始报数, 数到X时,将X的编号输出,并将那个人踢出, 下一个从1再開始报数,直到全部人都出去 思路: 就是计数.移除,没有太深的思想,直接上代码: pack ...
- 约瑟夫环的java解决
总共3中解决方法,1.数学推导,2.使用ArrayList递归解决,3.使用首位相连的LinkedList解决 import java.util.ArrayList; /** * 约瑟夫环问题 * 需 ...
- Java学习之约瑟夫环的两中处理方法
package day_2; import java.util.Scanner; /** * @author Administrator * 约瑟夫环问题: 设编号为 1,2,3,....n的N个人围 ...
- 循环列表的Java实现,解决约瑟夫环问题
import java.util.Scanner; /** * 循环列表的Java实现,解决约瑟夫环问题 * * @author LIU * */ public class LinkedList { ...
- 约瑟夫环 --- 面向对象 --- java代码
约瑟夫环 的 面向对象 解法 罗马人占领乔塔帕特后,39个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,由第1个 ...
- 约瑟夫环问题-Java数组解决
约瑟夫环问题说的是,n个人围成一圈,从第k个人开始沿着一个方向报数,报到第m个人时,第m个人出列,从紧挨着的下一个人(未出列)开始,求整个环中人的出列顺序.下面是我用java实现的解决方法. clas ...
- 约瑟夫环简介,问题以及java实现
问题:一群猴子排成一圈,按1,2,--.,n依次编号.然后从第一只开始数,数到第m只,把它踢出圈,从它后面再开始数,再数到第m只,再把它踢出去-------.,如此不停的进行下去,直到最后只剩下一只猴 ...
- Java实现约瑟夫环问题
约瑟夫环问题起源于一个犹太故事.约瑟夫环问题的大意如下: 罗马人攻占了桥塔帕特,41个人藏在一个山洞中躲过了这场浩劫.这41个人中,包括历史学家Josephus(约瑟夫)和他的一个朋友.剩余的39个人 ...
- 约瑟夫环(java面向对象实现)
/* * 作者:zhaop * 功能:约瑟夫环 * */ public class Joseph { public static void main(String[] args) { // TODO ...
随机推荐
- javascript之this指向
情况一: 如果一个函数中有this,但是没有被上一级调用,this指向window 例: function a(){ var num='11'; console.log(this.num); //u ...
- 洛谷 P1578 奶牛浴场 —— 最大子矩形
题目:https://www.luogu.org/problemnew/show/P1578 枚举左边界,向右枚举右边界,同时不断限制上下边界,最后右边界是整个图的边界: 由于没有做左边界是整个图的边 ...
- ThreadPoolExecutor之二:jdk实现的线程池介绍
一 简介 线程的使用在java中占有极其重要的地位,在jdk1.4极其之前的jdk版本中,关于线程池的使用是极其简陋的.在jdk1.5之后这一情况有了很大的改观.Jdk1.5之后加入了java.uti ...
- javaScript 基本知识点总结
1 javaScript 简介 JavaScript最初起源于LiveScript语言,当互联网开始流行时,越来越多的网站开始使用HTML表单与用户交互,然而表单交互却成了制约网络发展的重大瓶颈(用户 ...
- 图片加水印文字,logo。生成缩略图
简单JSP代码 图片加水银文字 try { String path = request.getRealPath("images\\01.jpg"); out.print(path) ...
- 基于 Algebird 谈一谈代数数据类型在数据聚合中的应用
此文已由作者肖乃同授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 代数数据类型是指满足一定数学特性的数据类型, 这些特性使得计算能够很方便的并行化,在Scalding和 S ...
- Androidstudio中添加jar包的方法
在Androidstudio中添加一个jar包进去,怎么添加? 以下纯个人使用Androidstudio过程中的经验积累,要是有不足,望提出建议. 方法一: 先点击Androidstudio中的Pro ...
- Swift3.0 字符串(string)
string常用的一些操作方式 //字符串 //1.初始化字符串 //1.1通过字面量赋值的方式初始化字符串 let tempStrig = "this is temp string&quo ...
- 51nod 1119【杨辉三角】
思路: = =杨辉三角的应用,组合数的应用: C(N+M,N); 逆元一发,费马小定理,OK. #include <stdio.h> #include <string.h> # ...
- 关于js变量作用域
先来看一段代码 var ss=1;function sss(){ alert(ss);}$(document).ready(function(){ var ss=2; alert(ss); sss() ...