首页 > 代码库 > Java 解决约瑟夫问题
Java 解决约瑟夫问题
约瑟夫问题(有时也称为约瑟夫斯置换,是一个出现在计算机科学和数学中的问题。在计算机编程的算法中,类似问题又称为约瑟夫环。又称“丢手绢问题”.)
有这样一个故事,15个教徒和15个非教徒在深海遇险必须讲一半的人投到海中,其余的人才能获救,于是想出这样过一个办法,30个人围城一圈。从第一个人开始一次报数,每次数到9,就将这个人扔到海中,直到剩余15个人为止。问怎样的排法,使得每次扔到海中都是非教徒
现在的一种办法就是一个Boolean数组来模拟30个人,非教徒为false。刚开始都没true,当数到9就为false,如果当前位置已经为false,就一到下个不为false 的位置。
算法代码如下
package com.huwei.java;public class Test { public static void main(String[] args) { Boolean[] userBoolean = new Boolean[30]; for (int i = 0; i < userBoolean.length; i++) { userBoolean[i] = true; } for (int i = 0; i < userBoolean.length; i++) { System.out.print(i+"="+userBoolean[i]+" "); } System.out.println(); int count = 0; int length = userBoolean.length; int index = 0; while (length >15) { count ++ ; if (count == 9) { count = 0 ; while (!userBoolean[index]) { index ++ ; } userBoolean[index] = false; length -- ; } index ++; if(index == userBoolean.length) index = 0; } for (int i = 0; i < userBoolean.length; i++) { System.out.print(i+"="+userBoolean[i]+" "); } }}
结果如下
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。