帮我改一改 各位高手们 我明天就要用了 谢谢了
任意一个5位数,比如:34256,把它的各位数字打乱,重新排列,可以得到一个最大的数:65432,一个最小的数23456。求这两个数字的差,得:41976,把这个数字再次重复上述过程(如果不足5位,则前边补0)。如此往复,数字会落入某个循环圈(称为数字黑洞)。比如,刚才的数字会落入:[82962, 75933, 63954, 61974] 这个循环圈。
请编写程序,找到5位数所有可能的循环圈,并输出,每个循环圈占1行。其中5位数全都相同则循环圈为 [0],这个可以不考虑。循环圈的输出格式仿照:
[82962, 75933, 63954, 61974]
其中数字的先后顺序可以不考虑。
public class heldong {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int aaa=1;
System.out.println(aaa);
int q[]=new int[5];
int e[][]=new int[200000][20];
for(int i=10000;i<=99999;i++)
{
int a1=i/10000;
int a2=(i-a1*10000)/1000;
int a3=(i-a1*10000-a2*1000)/100;
int a4=(i-a1*10000-a2*1000-a3*100)/10;
int a5=i-a1*10000-a2*1000-a3*100-a4*10;
q[0]=a1;
q[1]=a2;
q[2]=a3;
q[3]=a4;
q[4]=a5; //q数组是存放一个数的各个位
for (int m=0;m<4;m++)
{
for(int n=m+1;n<5;n++)
if(q[m]<q[n])
{
int j=q[m];
q[m]=q[n];
q[n]=j;
}
}
int max=q[0]*10000+q[1]*1000+q[2]*100+q[3]*10+q[4];
int min=q[4]*10000+q[3]*1000+q[2]*100+q[1]*10+q[0];
int w=max-min;//存放差
System.out.println(w);
/*int u[]=new int [20];
u[19]=w;
int p=0;
int y=0;
for(int o=0;o<19;o++)
{
if(u[o]==0)
{
y=o;
continue;
}
if(u[19]==u[o])
{
p=p+1;
continue;
}
}
if(p==0)
{
u[y+1]=u[19];
}
for(int z=aaa;z==aaa;z++)
{
for(int r=0;r<17;r++)
{
e[z-1][r]=u[r];
}
}
aaa++;*/
}
/* for(int z=0;z<200000;z++)
{
for(int r=0;r<20;r++)
{
if (e[z][r]==0)
continue;
System.out.print(e[z][r]);
}
System.out.println("");
}*/
}
}