任意选一个四位数(数字不能全相同),把所有数字从大到小排列,再把所有数字从小到大排列,用前者减去后者得到一个新的数。重复对新得到的数进行上述操作,7 步以内必然会得到 6174。
我用c写了相关的代码,如下
这是纯循环来做的:
#include <stdio.h>
int main(void)
{
int num,i,k,j,max,min,temp;
int a[4],m[4],s[4];
printf(“请输入一个四位数(四个数字不完全相同):\n”);
scanf("%d",&num);//得到输入的四位数
for (k=1;k<=7;k++) //7步得到6174,循环7次
{
a[0]=num/1000; //对四位数进行分解,得到四个数字
a[1]=num/100-a[0]10;
a[2]=num/10-a[0]100-a[1]10;
a[3]=num%10;
//对四个数字进行排序,从大到小
//冒泡排序
for (i=0;i<4;i++)
{
for (j=1+i;j<4;j++)
{
if (a[i]<a[j])
{
temp=a[i];//从大到小排序
a[i]=a[j];
a[j]=temp;
}
}
}
for (i=0;i<4;i++)
{
m[i]=a[i];
s[i]=a[3-i];
}
max=1000m[0]+100m[1]+10m[2]+m[3];//得到最大的四位数字
min=1000s[0]+100s[1]+10*s[2]+s[3];//得到最小的四位数
num=max-min;//循环
printf(“第%d步:%d-%d=%d\n”,k,max,min,num);
if (num==6174)//如果提前得到6174,退出循环
break;
}
printf(“一共通过%d步得到了6174\n”,k);
return 0;
}