• 约瑟夫问题----(数组+list)实现


    import java.util.ArrayList;
    import java.util.List;
    
    
    public class JosephusProblem2 {
        public static void main(String[] args) {
            //lis: 1    2    3    4    5    6    7    8
            int[] arr = new int[8];
            for (int i = 0; i < 8; i++) {
                System.out.print(i+1+"	");
                arr[i]=i+1;
            }
            System.out.println();
            play(2, 2, arr);
            
        }
        
        /**
         * 
         * @param n 第几个开始报数
         * @param k  报数报到多少
         * @param lis 参加集合
         */
        public static void play(int n ,int k,int[] arr){
            if(arr==null ||arr.length==0|| n<=0 || n>arr.length){
                System.out.println("链表有误,请重新校验");
                return;
            }
            int m = 1;
            boolean flag = true;
            List<Integer> newLis = new ArrayList<Integer>();
            while(flag){
                if(newLis.size()==1){
                    System.out.print(newLis.get(0)+"	");
                    break;
                }
                newLis.removeAll(newLis);
                for (int i = 0; i < arr.length; i++) {
                    int g = arr[i];
                    if(g==0){
                        continue;
                    }else{
                        newLis.add(g);
                    }
                    if(m==(n+k-1)){
                        System.out.print(g+"	");
                        arr[i] = 0;
                        n=0; //第一次循环后 步长从当前算起
                        m=0;
                        continue;
                    }
                    m++;
                }
            }
        }
    }
  • 相关阅读:
    UVa 11389
    uva 1418
    uva 10905 Children's Game
    uva 471
    UVA 1508
    Uva120 Stacks of Flapjacks
    UVA 10020 Minimal coverage
    UVA434
    UVa 311
    决策树算法
  • 原文地址:https://www.cnblogs.com/cai170221/p/13502241.html
Copyright © 2020-2023  润新知