一个最小的数23456。求这两个数字的差,得:41976,把这个数字再次重复上述过程(如果不足5位,则前边补0)。如此往复,数字会落入某个循环圈(称为数字黑洞)。
比如,刚才的数字会落入:[82962, 75933, 63954, 61974] 这个循环圈。
请编写程序,找到5位数所有可能的循环圈,并输出,每个循环圈占1行。其中5位数全都相同则循环圈为 [0],这个可以不考虑。循环圈的输出格式仿照:
[82962, 75933, 63954, 61974]
其中数字的先后顺序可以不考虑。
用c语言程序做
你可不可以帮我每行注释一下具体求的是什么?我是菜鸟……
追答int r,s,t,max,min,x[];//定义
for(i=9;i++;i>=0)//万位 保证万位数字最大
for(j=i;j++;j>=0)//千
for(k=j;k++;k>=0)//百
for(m=k;m++;m>=0)//十
for(n=m;n++;n>=0)//个
{ max=10000*i+1000*j+100*k+10*m+n;//重新排列后最大值
min=10000*n+1000*m+100*k+10*j+i;
x[0]=max-min;//应输出的第一个数
if(x[0]==0) continue;//5个数字一样的不考虑
for(s=1;s++;;)
{ x[s]=fun(x[s-1]);//算出x[s]重新排列后的差
{ for(t=0;t++;;)//把要输出的数放在x[]中
if(x[s]==x[t]) break; }//有重复的就不用算了
if(x[s]==x[t]) break; }//跳出循环
for(r=s;r++;r<=t)
{ printf("%d",x[r]); }//输出差数
printf("\n"); }
int fun(int a)//定义计算差值的函数
{ int x[5];//把每位上数字存在x[5]中
int i,j,max,min;
x[0]=a/10000;//万位
x[1]=a/1000%10;//千
x[2]=a/100%10;//百
x[3]=a/10%10;//十
x[4]=a%10;//个
for(i=1;i++;i<5)//重组数字
for(j=i+1;j++;j<5)
{ if(x[i]<x[j])//保证x[i]大于x[j]
{ k=x[i];x[i]=x[j];x[j]=k; }}
max=x[0]*10000+x[1]*1000+x[2]*100+x[3]*10+x[4];
min=x[4]*10000+x[3]*1000+x[2]*100+x[1]*10+x[0];
return max-min;}
有啥不懂你指出来把,全部注释有点困难