zoukankan      html  css  js  c++  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]+"  ");
    		}
    	}
    
    }
    

      结果如下

  • 相关阅读:
    [HAOI2009] 毛毛虫
    [NOI2015]品酒大会
    SDOI2016 生成魔咒
    [POJ2406]字符串的幂
    [SPOJ705]不同的子串
    快速幂和矩阵快速幂
    对于最近的一些日常总结by520(17.10.18)
    思维训练
    趣味性的高智商(贼有意思)的题(坑)
    C++手动开O2优化
  • 原文地址:https://www.cnblogs.com/huwei0814/p/3855380.html
Copyright © 2011-2022 走看看