主页 > 帕鲁指南 > java问题,高手进来
帕鲁指南

java问题,高手进来

2024-12-22 22:52  来自:未知  凌晨365手游网

public class Resolve {

    static final int DIGITS = 5;

    static ArrayList<List<Integer>> results= new ArrayList<List<Integer>>();

    static HashSet<Integer> repeatSet = new HashSet<Integer>();

    

    public static int[] digitNumArray(int num){

        

        

        int[] array = new int[DIGITS];

        for(int i=1,j=getBoundary();i<=DIGITS;i++){

            int k = num/j;

            for(int l=0;l<DIGITS;l++){

                if(array[l]==0){

                    array[l]=k;

                    break;

                }else if(array[l]>k){

                    for(int m=DIGITS-1;m>l;m--){

                        array[m]=array[m-1];

                    }

                    array[l]=k;

                    break;

                }

            }

            num=num-k*j;

            j=j/10;

        }

        

        return array;

    }

    public static int max(int[] digitNums){

        int result=0;

        for(int i=DIGITS-1;i>=0;i--){

            result=result*10+digitNums[i];

        }

        return result;

    }

    public static int min(int[] digitNums){

        int result=0;

        for(int i=0;i<DIGITS;i++){

            result=result*10+digitNums[i];

        }

        return result;

    }

    public static int nextNum(int currentNum){

        int[] array = digitNumArray(currentNum);

        int result= max(array)-min(array);

        return result;

    }

    public static int getBoundary(){

        int boundary=1;

        for(int i=2;i<=DIGITS;i++){

            boundary=boundary*10;

        }

        return boundary;

    }

    public static boolean isLegal(int num){

        int boundary= getBoundary();

        if(num>=boundary && num<boundary*10){

            return true;

        }

        return false;

    }

    public static void checkAndSaveLoopNum(int num){

        ArrayList<Integer> list = new ArrayList<Integer>();

        list.add(num);

        num=nextNum(num);

        while(isLegal(num) && !repeatSet.contains(num)){

            if(list.contains(num)){

                int beginPos = list.indexOf(num);

                List<Integer> loopNums = list.subList(beginPos, list.size());

                results.add(loopNums);

                for(Integer i : loopNums){

                    repeatSet.add(i);

                }

                return;

            }

            list.add(num);

            num=nextNum(num);

        }

    }

    

    public static void displayResults(){

        for(List<Integer> list : results){

            System.out.println(list.toString());

        }

    }

    

    public static void main(String[] args){

        final int num=getBoundary();

        for(int i=num;i<num*10;i++){

            checkAndSaveLoopNum(i);

        }

        //checkAndSaveLoopNum(82962);

        displayResults();

    }

}