回复 3楼 hjywyj
/*任意一个5位数,比如:34256,把它的各位数字打乱,重新排列,可以得到一个最大的数:65432,一个最小的数23456。
求这两个数字的差,得:41976,把这个数字再次重复上述过程(如果不足5位,则前边补0)。如此往复,数字会落入某个循环圈(称为数字黑洞)。
比如,刚才的数字会落入:[82962, 75933, 63954, 61974] 这个循环圈。
请编写程序,找到5位数所有可能的循环圈,并输出,每个循环圈占1行。其中5位数全都相同则循环圈为 [0],这个可以不考虑。循环圈的输出格式仿照:
[82962, 75933, 63954, 61974]
其中数字的先后顺序可以不考虑。
*/
#include "stdio.h"
int m(int a,int b,int c,int d,int e)
{ int i,j,x[5]={a,b,c,d,e},temp;
for(i=0;i<4;i++)
for(j=i+1;j<5;j++)
{
if(x[i]<x[j])
{temp=x[i];
x[i]=x[j];
x[j]=temp;
}
}
return x[0]*10000+x[1]*1000+x[2]*100+x[3]*10+x[4];//排序
找出 最大数
}
int n(int a,int b,int c,int d,int e)
{ int i,j,x[5]={a,b,c,d,e},temp;
for(i=0;i<4;i++)
for(j=i+1;j<5;j++)
{if(x[i]<x[j])
{ temp=x[i];
x[i]=x[j];
x[j]=temp;
}
}
return x[4]*10000+x[3]*1000+x[2]*100+x[1]*10+x[0];//排序
找出最小数
}
main()
{
int num,a,b,c,d,e,i=0,cha,max=0,min=0,k=0;
scanf("%d",&num);
while(num){
a=num/10000;
b=num%10000/1000;
c=num%1000/100;
d=num%100/10;
e=num%10;
max=m(a,b,c,d,e);
min=n(a,b,c,d,e);
//printf("%d
",max);
//printf("%d
",min);
cha=max-min;
printf("%d ",cha);
i++;
if(i==10) break;
num=cha;
}
}
输入34256,输出41976 ,82962, 75933, 63954, 61974,82962, 75933, 63954, 61974,82962, 75933, 63954, 61974...
再加什么程序,可以输出82962, 75933, 63954, 61974
[
本帖最后由 huwengui 于 2011-4-27 12:29 编辑 ]