zoukankan      html  css  js  c++  java
  • 约瑟夫环(静态数组和动态数组解法)

    第一种解法:

    import java.util.LinkedList;
    
     class MonkeyKing{
        public static void main(String[] args) {
            LinkedList<Integer> monkeys = new LinkedList<Integer>(){{
                for (int i = 1; i <= 100; i++)
                    add(i);
            }
            };
            int count = 15;
            int i = -1;
            while (count > 1){
                int temp = i + 7;
                if (temp >= count)
                    temp = temp % count;
                monkeys.remove(temp);
                count--;
                i = --temp;
            }
            System.out.println(monkeys.get(0));
        }
    }

    与第一种解法相似思路(ArrayList):

    import java.util.ArrayList;
     class MonkeyKing {
        public int selectKing(ArrayList list){
            int k=0;//报数的猴子的索引
            int count=1;// 报的数
            //当猴子有两只或两只以上时时
            while(list.size()>1){
                //报到7的猴子出局
                if(count%7==0){
                    System.out.println("第"+(Integer)list.get(k)+"只猴子出局");
                    list.remove(k);
                    if(k>list.size()-1) k=0; //出局的是末尾的猴子,从头开始
                    count=1;
                }else{
                    count++;
                    if(k<list.size()-1) k++;
                    else k=0; //报到了末尾的那只猴子,从头开始
                }
            }
            return (Integer)list.get(0);
        }
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            ArrayList mylist=new ArrayList();
            for(int i=1;i<=15;i++)
                mylist.add(i);
            MonkeyKing mk=new MonkeyKing();
            System.out.println("大王是第"+mk.selectKing(mylist)+"只猴子");
        }
    }

    第二种(静态数组解法):

    class Test
    {
        public static void main(String[]args)
        {
            //功能:定义数组并向每个下标赋值
            int[] arr = new int[15];
            for(int i=0; i<arr.length; i++)
            {
                arr[i] = i;
            }
    
            //调用example方法,并由arr接收返回值
            int[] arr1 = example(arr);
    
            //打印arr[0]的原因:因为arr数组接收example的返回值后arr的长度为1。
            System.out.println("大王是编号为:"+arr1[0]+"的猴子");
        }
    
        public static int[] example(int[] arr)
        {
            int counter = 0;
    
            while(arr.length!=1)
            {
                int a = 0;//用于记录每一次循环时对arr操作的次数
    
                //功能:将报数为7的元素变成无效元素
                for(int i=0; i<arr.length; i++)
                {
                    counter++;
                    if(counter==7)
                    {
                        System.out.println("Test: 即将删除"+arr[i]);
                        arr[i] = 0;
                        counter = 0;
                        a++;
                    }
                }
    
                //功能:将arr中存储无效元素的下标删除
                int[] newarr = new int[arr.length-a];
                int index = 0;
                for(int i=0; i<arr.length; i++)
                {
                    if(arr[i]!=0)
                    {
                        newarr[index++] = arr[i];
                    }
                }
                arr = newarr;
            }
            return arr;
        }
    }
  • 相关阅读:
    怎样装两个MySQL服务器
    MySQL 8.0.12的安装与卸载
    位运算符2
    位运算符
    赋值运算符
    love心形
    变量之间运算
    变量
    标识符
    算术运算符
  • 原文地址:https://www.cnblogs.com/hetaoyuan/p/11450754.html
Copyright © 2011-2022 走看看