Java简单实现约瑟夫环算法示例
作者:perfect亮 发布时间:2023-04-04 09:59:41
标签:Java,约瑟夫环,算法
本文实例讲述了Java简单实现约瑟夫环算法。分享给大家供大家参考,具体如下:
1.算法背景:
罗马人攻占了乔塔帕特,41人藏在一个山洞中躲过了这场浩劫。这41个人中,包括历史学家josephus和他的一个朋友。剩余的39个人为了表示不向罗马人屈服,决定 * 。大家决定了一个 * 方案,所有这41人围城一个圆圈,由第一个人开始顺时针报数,没报数为3的人就立刻 * ,然后由下一个人重新开始报数
仍然是每报数为3的人就立刻 * ,......,知道所有人都 * 死亡为止.
约瑟夫和他的朋友并不想 * ,于是约瑟夫想到了一个计策,他们两个同样参数到 * 方案中,但是最后却躲过了 * 。请问是怎么做到的
2.下面直接代码进行实现:
public class YueSeFuHuan {
static final int nums = 41;// 总共多少人
static final int killMan = 3;// 数到3则被杀
public static void main(String[] args) {
jufehus(2);
}
public static void jufehus(int alive) {
int[] man = new int[nums];// 未被杀的都被标记为0
int pos = -1;// 数组角标
int i = 0;
int count = 1;// 杀到第几个记录值
while (count <= nums) {
do {
pos = (pos + 1) % nums;// 循环标记
if (man[pos] == 0)
i++;
if (i == killMan) {
i = 0; // 重置
break;// 找到了被杀的位置,跳出循环,进行标记
}
} while (true);
man[pos] = count;
count++;
}
System.out.println("脚本之家测试结果:");
// 显示不被杀的位置
alive = count - alive;
for (int j = 0; j < man.length; j++) {
if (man[j] >= alive)
System.out.println("不被杀的位置是->" + (j + 1));
}
}
}
打印出结果是:
希望本文所述对大家java程序设计有所帮助。
来源:http://www.cnblogs.com/liangstudyhome/p/4582756.html
0
投稿
猜你喜欢
- 本文实例为大家分享了java实现微信红包的具体代码,供大家参考,具体内容如下要求基于BigDecimal类实现微信红包算法的功能,比如设置红
- 今天被数据大神说了,对接第三方接口返回的json字段我想用驼峰形式,他说我这样不专业。所以就改了,认怂。记住以后再次对接rest接口,返回的
- 异常日志[com.alibaba.dubbo.rpc.filter.TimeoutFilter] - [DUBBO] invok
- 在做业务开发时,遇到了一个事务不起作用的问题。大概流程是这样的,方法内部的定时任务调用了一个带事务的方法,失败后事务没有回滚。查阅资料后,问
- 什么是继承面向对象的特征:封装:不必要公开的数据成员和方法,使用private关键字进行修饰。意义:安全性。背景代码中创建的类, 主要是为了
- 单例类保证一个类全局仅有一个实例,并提供一个全局访问点,由于只能生成一个实例,因此我们必须把构造函数设为私有函数以禁止他人创建实例。实现1:
- 1.内部类概念及分类将一个类定义在另一个类的内部或者接口内部或者方法体内部,这个类就被称为内部类,我们不妨将内部类所在的类称为外围类,除了定
- 第一节 接口慨述接口(interface)用来定义一种程序的协定。实现接口的类或者结构要与接口的定义严格一致。有了这个协定,就可以抛开编程语
- like模糊查询特殊字符报错转义处理方案1 <if test="projectName!
- Java常用API介绍API概念什么是API?API(Application Programming interface) 应用程序编程接口
- Struts2的核心在于它复杂的 * ,几乎70%的工作都是由 * 完成的。比如我们之前用于将上传的文件对应于action实例中的三个属性的
- 本文实例讲述了C#实现将记事本中的代码编译成可执行文件的方法,运行环境为VS2012,具体方法如下:1、在记事本中编写如下代码:using
- 本文实例为大家分享了Spring AOP实现记录操作日志的具体代码,供大家参考,具体内容如下1 添加maven依赖<dependenc
- 前言链表是一种数据结构,和数组同级。比如,Java中我们使用的ArrayList,其实现原理是数组。而LinkedList的实现原理就是链表
- 概述模板方法模板方法定义了一个算法的步骤,并允许子类为一个或多个步骤提供实现。那么什么是模板方法呢?我们看下模板方法的定义。一个具体方法而非
- 本文通过优化买票的重复流程来说明享元模式,为了加深对该模式的理解,会以String和基本数据类型的包装类对该模式的设计进一步说明。读者可以拉
- 关于约瑟夫环的基本知识:罗马人攻占了乔塔帕特,41人藏在一个山洞中躲过了这场浩劫。这41个人中,包括历史学家josephus和他的一个朋友。
- Swing包的介绍Java基础类数据库(Java Foundation Class)给java应用程序增加了图形界面、丰富的功能性以及与用户
- 定义可理解为 适配广泛的类型,即参数化类型,可以把类型像方法的参数那样进行传递。// 以ArrayList为示例// 泛型T可以是任意类pu
- 前言JavaEE(Java Enterprise Edition),Java企业版,是一个用于企业级web开发平台。最早由Sun公司定制并发