#include <stdio.h>
#include <stdlib.h>
int kblk(int n);
int sortmax(int a[]);
int sortmin(int a[]);
int count=1;
int kblk(int n)
{
int a[4],i=0;
do
{
a[i]=n%10;
n/=10;
i++;
}while(n>0);
int b[4];
int x,y;
for(i=0;i<4;i++)
{
b[i]=a[i];
}
sortmax(a);
sortmin(b);
x=1000*a[0]+100*a[1]+10*a[2]+a[3];
y=1000*b[0]+100*b[1]+10*b[2]+b[3];
if(x-y==6174)
{
printf(" [%d]:%d-%d=%d\n",count,x,y,x-y);
return 1;
}
else
{
printf(" [%d]:%d-%d=%d\n",count,x,y,x-y);
count++;
return kblk(x-y);
}
}
int sortmax(int a[])
{
int i,j,k,temp;
for(i=0;i<4;i++)
{
k=i;
for(j=i+1;j<4;j++)
{
if(a[j]>a[k]) k=j;
}
if(k!=i)
{
temp=a[i];
a[i]=a[k];
a[k]=temp;
}
}
}
int sortmin(int a[])
{
int i,j,k,temp;
for(i=0;i<4;i++)
{
k=i;
for(j=i+1;j<4;j++)
{
if(a[j]<a[k]) k=j;
}
if(k!=i)
{
temp=a[i];
a[i]=a[k];
a[k]=temp;
}
}
}
int main()
{
int i=0,j,x,y;
printf("Enter number:");
scanf("%d",&x);
kblk(x);
}
即:任意一个四位数,只要它们各个位上的数字是不全相同的,就有这样的规律:
(1)将组成该四位数的四个数字由大到小排列,形成由这四个数字构成的最大的四位数;
(2)将组成该四位数的四个数字由小到大排列,形成由这四个数字构成的最小的四位数(如果四个数字中含有0,则得到的数不足四位);
(3)求两个数的差,得到一个新的四位数(高位零保留)。
重复以上过程,最后得到的结果总是6174。这个数被称为卡布列克常数。请编写一个递归函数,完成以上的卡布列克运算。
**输入格式要求:"%d" 提示信息:"Enter number:"
**输出格式要求:" [%d]:%d-%d=%d\n"
程序运行示例如下:
Enter number: 1234
[1]:4321-1234=3087
[2]:8730-378=8352
[3]:8532-2358=6174