数学黑洞
#include <stdio.h>
#include <stdlib.h>
int a[112345],t;
void qs(int a[],int l,int r)
{
int key=a[l],i=l,j=r;
if(l>=r)
return;
while(i<j)
{
while(i<j&&a[j]>=key)
j--;
a[i]=a[j];
while(i<j&&a[i]<=key)
i++;
a[j]=a[i];
}
a[i]=key;
qs(a,l,i-1);
qs(a,i+1,r);
}
void f(int n)
{
int o=0,max,min,m;
while(n>0)
{
a[o++]=n%10;
n=n/10;
}
qs(a,0,3);
max=a[3]*1000+a[2]*100+a[1]*10+a[0];
min=a[0]*1000+a[1]*100+a[2]*10+a[3];
m=max-min;
printf("%d ",m);
while(m<1000)
m=m*10;
if(m!=6174)
{
f(m);
}
t++;
}
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
t=0;
f(n);
printf("\n");
printf("%d\n",t);
}
return 0;
}
#include <stdlib.h>
int a[112345],t;
void qs(int a[],int l,int r)
{
int key=a[l],i=l,j=r;
if(l>=r)
return;
while(i<j)
{
while(i<j&&a[j]>=key)
j--;
a[i]=a[j];
while(i<j&&a[i]<=key)
i++;
a[j]=a[i];
}
a[i]=key;
qs(a,l,i-1);
qs(a,i+1,r);
}
void f(int n)
{
int o=0,max,min,m;
while(n>0)
{
a[o++]=n%10;
n=n/10;
}
qs(a,0,3);
max=a[3]*1000+a[2]*100+a[1]*10+a[0];
min=a[0]*1000+a[1]*100+a[2]*10+a[3];
m=max-min;
printf("%d ",m);
while(m<1000)
m=m*10;
if(m!=6174)
{
f(m);
}
t++;
}
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
t=0;
f(n);
printf("\n");
printf("%d\n",t);
}
return 0;
}

浙公网安备 33010602011771号