zoukankan      html  css  js  c++  java
  • 【JAVA】集合的使用:约瑟夫问题

    对于约瑟夫问题三种求解方法:

    • 数组模拟
    • 结构体模拟
    • 数学递归

    java集合约瑟夫问题第一版(数组模拟)

    package txtt;
    
    import java.util.*;
    
    public class Josen {
    	
    	private int m;
    	private int n;
    	private int step;
    	
    	
    	private List<Integer> josen = new ArrayList<>();
    	
    	public Josen() {
    		
    	}
    	public Josen(int m, int n) {
    		for(int i = 0;i<n;i++) {
    					
    					josen.add(1);
    				}
    		this.step = m;
    		setM(m);
    		setN(n);
    	
    		
    	}
    	public int getM() {
    		return m;
    	}
    	public void setM(int m) {
    		this.m = m;
    	}
    	public int getN() {
    		return n;
    	}
    	public void setN(int n) {
    		this.n = n;
    	}
    
    	public void printOut() {
    		
    		int index = 0;
    		int lenth = josen.size();
    		while(lenth !=1) {
    			while(step>0) {
    				if(josen.get(index)  == 1)
    				{
    					step--;
    					
    				}
    				if(step>0)
    				index++;
    				if(index == n)
    					index = 0;
    			}
    			lenth--;
    			step = m;
    			josen.set(index, 0);
    			System.out.println("第"+(index+1)+"人出局");
    			
    		}
    		while(josen.get(index)==0) {
    			index++;
    		}
    		System.out.println("幸存者"+(index+1));
    		
    		
    		
    	}
    	
    	
    	
    	
    
    }
    
    

    第一次写的就是数组,和集合没啥关系,就套用了集合的一个容器,集合的简便方法都没用上。所以改一下(利用上集合的remove方法)

    java集合约瑟夫问题第二版(数组模拟)

    package txtt;
    
    import java.util.*;
    
    public class Josen {
    	
    	private int m;
    	private int n;
    	private int step;
    	
    	
    	private List<Integer> josen = new ArrayList<>();
    	
    	public Josen() {
    		
    	}
    	public Josen(int m, int n) {
    		for(int i = 0;i<n;i++) {
    					
    					josen.add(i);
    				}
    		this.step = m;
    		setM(m);
    		setN(n);
    	
    		
    	}
    	public int getM() {
    		return m;
    	}
    	public void setM(int m) {
    		this.m = m;
    	}
    	public int getN() {
    		return n;
    	}
    	public void setN(int n) {
    		this.n = n;
    	}
    
    	public void printOut() {
    		
    		int index = 0;
    		while(josen.size() !=1) {
    			while(step>0) {
    				
    					step--;
    					
    				if(step>0)
    				index++;
    				if(index >= josen.size())
    					index = 0;
    			}
    			
    			josen.remove(index);
    			step = m;
    			System.out.println("第"+index+"人出局");
    			System.out.println(josen);
    			
    		}
    		
    		
    		
    		
    		
    	}
    	
    	
    	
    	
    
    }
    
    
    
    
    
    
    
  • 相关阅读:
    数据库主体拥有数据库角色,无法删除
    popupWin类QQ弹出窗口
    使用性能监视器找出硬件瓶颈
    关于反射中Assembly.CreateInstance()与Activator.CreateInstance()方法的区别
    大数据的通用分页总结!
    SQL 注入[转自:微软技术中心]
    【转】 使用Yahoo的公开API做天气预报
    JS对select动态添加options操作
    asp.net “从客户端检测到有潜在危险的Request.Form值” 处理办法
    SQL中索引的原理
  • 原文地址:https://www.cnblogs.com/zhujiaozhu/p/15519402.html
Copyright © 2011-2022 走看看