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


猜你喜欢
- 本文介绍了eclipse下搭建hibernate5.0环境的步骤,分享给大家,具体如下:hibernate引入的jar包:hibernate
- 目录多通道分离API操作通道合并API操作结果源码多通道分离APIpublic static void split(Mat m, List&
- 如果没有安装过maven,是用的idea自带的maven,那就是idea的安装目录下 /plugins/maven/lib/maven3这个
- MyBatis 是支持普通 SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis 消除了几乎所有的JDBC代码和参数的手工设置以及
- 一、概述应用程序配置文件,对于asp.net是 web.config,对于WINFORM程序是 App.Config(ExeName.exe
- 1. 自动化装配介绍Spring Boot针对mvc做了大量封装,简化开发者的使用,内部是如何管理资源配置,Bean配置,环境变量配置以及启
- Lambda表达式类似匿名函数,简单地说,它是没有声明的方法,也即没有访问修饰符、返回值声明和方法名。Lambda允许把函数作为一个方法的参
- 本文实例为大家分享了Android刮刮卡效果,供大家参考,具体内容如下android实现底层一张图片,上层一个遮罩层,触摸滑动按手指滑动路径
- Fastjson是一个Java语言编写的高性能功能完善的JSON库。将解析json的性能提升到极致,是目前Java语言中最快的JSON库。F
- 原文地址:http://www.javayihao.top/detail/84一:概述由于springboot项目,不管是java工程还是w
- 下载 Android SDK,官网:www.android.com 我相信很多人跟我一样,进不去。Android Studio 中文官网 w
- 本文实例讲述了Java文件操作工具类fileUtil。分享给大家供大家参考,具体如下:package com.gcloud.common;i
- 本文实例讲述了C#双缓冲实现方法。分享给大家供大家参考,具体如下:// 该调用是 Windows.Forms &nb
- 大多数浏览器会对同一域名的请求限制请求数量,一般是在8个以内。每次最多可以同时请求8个,要是资源多于8个,那么剩下的就要排队等待请求了。所以
- 前言同C语言一样,Java也有断言关键字assert,它们的用法也比较相似。注意:Java的断言是从1.4版本开始的,以前的版本不支持断言。
- NameServer1.架构设计消息中间件的设计思路一般都是基于主题订阅与发布的机制,RocketMQ也不例外。RocketMQ中,消息生产
- 网上找的一个单页面通讯录,修改之后将添加联系人和修改/删除联系人分为两个独立页面MainActivitypackage com.exampl
- 图片的复制无非有两种方法,一种是图片直接上传到服务器,另外一种转换成二进制流的base64码目前限chrome浏览器使用首先以um-edit
- JetBrains 系列产品(IDEA、Pycharm 等)使用本站破解教程 (opens new window),在输入激活码时,部分小伙
- java执行xshell命令实例import java.io.BufferedReader;import java.io.IOExcepti