Java简单实现约瑟夫环算法示例
- 更新时间:2023-01-06 11:36:41
- 编辑:袁南晴
参考资料
- Java程序设计 课后答案 / 89.2 KB / 雍俊海 推荐度:
- JAVA核心技术卷2:高级特征(第8版) PDF 电子书 / 57.40MB / 斯特曼 推荐度:
- Java完全自学教程 PDF 电子书 / 18.7 MB / 明日科技 推荐度:
正文内容
本文实例讲述了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算法相关内容感兴趣的读者可查看本站专题:《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》
希望本文所述对大家java程序设计有所帮助。
Java相关教程
-
总结Java文本编辑器实现方法
这篇文章主要介绍了Java文本编辑器实现方法,结合实例形式详细分析了java文本编辑器结构、原理、布局、实现步骤与相关操作技巧,需要的朋友可以参考下
发布时间:2019-06-07
-
Java List 用法实例详解
这篇文章主要介绍了Java List 用法详解及实例分析的相关资料,需要的朋友可以参考下
发布时间:2020-02-01
-
深入理解Java泛型的概念、定义与运行方法
这篇文章主要介绍了Java泛型的概念、定义与运行方法,结合实例形式分析了java泛型的基本概念、定义与IDEA、命令行两种运行方法,需要的朋友可以参考下
发布时间:2020-02-14
-
实例讲解Java中random.nextInt()与Math.random()的基础用法
给大家整理了关于Java的教程,今天小编就为大家分享一篇关于实例讲解Java中random.nextInt()与Math.random()的基础用法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
发布时间:2022-06-26
-
java使用多线程读取超大文件
给网友朋友们带来一篇关于java的教程,这篇文章主要为大家详细介绍了java使用多线程读取超大文件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
发布时间:2022-06-28
-
java获取rabbitmq消息总数是多少
在本篇文章中小编给各位分享了关于java获取rabbitmq消息总数的知识点以及实例代码内容,有需要的朋友们跟着学习参考下。
发布时间:2019-07-04
-
Java中Collections.emptyList()的注意事项
给大家整理了关于Java的教程,这篇文章主要给大家介绍了关于Java中Collections.emptyList()的注意事项,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
发布时间:2022-10-19
-
Java实现Promise.all()的代码实例
这篇文章主要介绍了Java实现Promise.all()的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
发布时间:2019-12-05
-
简谈java并发FutureTask的实现
为网友们分享了关于java的教程,这篇文章主要介绍了简谈java并发FutureTask的实现,FutureTask都是用于获取线程执行的返回结果。文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,,需要的朋友可
发布时间:2022-07-12
-
java实现杨辉三角两种输出结果代码
这篇文章主要介绍了java编程实现杨辉三角两种输出结果实例代码,具有一定借鉴价值,需要的朋友可以参考下。
发布时间:2019-06-19