java数字循环圈问题

任意一个5位数,比如:34256,把它的各位数字打乱,重新排列,可以得到一个最大的数:65432,一个最小的数23456。求这两个数字的差,得:41976,把这个数字再次重复上述过程(如果不足5位,则前边补0)。如此往复,数字会落入某个循环圈(称为数字黑洞)。

比如,刚才的数字会落入:[82962, 75933, 63954, 61974] 这个循环圈。

 

请编写程序,找到5位数所有可能的循环圈,并输出,每个循环圈占1行。其中5位数全都相同则循环圈为 [0],这个可以不考虑。循环圈的输出格式仿照:

[82962, 75933, 63954, 61974]

其中数字的先后顺序可以不考虑。

import java.util.*;

public class Test_10 {

 

       /**

        * @param args

        */

       public static void main(String[] args) {

              // TODO Auto-generated method stub

              ArrayList<String> arry=new ArrayList<String>();

              int i,j,k,m,n,p;

              for(i=1;i<=9;i++)

                     for(j=0;j<=9;j++)

                            for(k=0;k<=9;k++)

                                   for(m=0;m<=9;m++)

                                          for(n=0;n<=9;n++){

                                                 String mun=String.valueOf(i)+j+k+m+n;

                                                 arry=Rual(mun,arry);

                                                 p=arry.size();

                                                 if(arry.get(p-1)!=arry.get(p-2))

                                                     System.out.println("["+arry.get(p-1)+" "+arry.get(p-2)+" "+arry.get(p-3)+" "+arry.get(p-4)+"]");

                                                 arry.clear();

                                          }                                              

       }

    public static ArrayList<String> Rual(String mun,ArrayList<String> arry){

           int max=Max_Test(mun);

           int min=Min_Test(mun);

           int ag=max-min;

           String str=String.valueOf(ag);          

           if(arry.size()>4&&arry.contains(str)){

                  arry.add(str);

           }else{

                  arry.add(str);

                  while(str.length()!=5){

                      str+="0";

               }

               arry=Rual(str,arry);

           }         

           return arry;

          

    }

    public static int Max_Test(String mun){

           int[] ch=new int[5];

           int max=0;

           int i=0,j,k,temp;

           for(i=0;i<5;i++){

                  ch[i]=mun.charAt(i);

           }

           for(j=0;j<4;j++)

                  for(k=j;k<5;k++)

                         if(ch[j]<ch[k]){

                                temp=ch[j];

                                ch[j]=ch[k];

                                ch[k]=temp;

                         }

           max=(int)(ch[0]*Math.pow(10,4)+ch[1]*Math.pow(10, 3)+ch[2]*100+ch[3]*10+ch[4]);     

           return max;

    }

    public static int Min_Test(String mun){

           int[] ch=new int[5];

           int min=0;

           int i=0,j,k,temp;

           for(i=0;i<5;i++){

                  ch[i]=mun.charAt(i);

           }

           for(j=0;j<4;j++)

                  for(k=j;k<5;k++)

                         if(ch[j]<ch[k]){

                                temp=ch[j];

                                ch[j]=ch[k];

                                ch[k]=temp;

                         }

           min=(int)(ch[4]*Math.pow(10,4)+ch[3]*Math.pow(10, 3)+ch[2]*100+ch[1]*10+ch[0]);     

           return min;

    }

}

posted @ 2011-05-19 12:33  白龙龙  阅读(309)  评论(0编辑  收藏  举报