题目描述
Description
已知:一个任意的四位正整数。将数字重新组合成一个最大的数和最小的数相减,重复这个过程,最多七步,必得6174。即:7641-1467=6174。将永远出不来。求证:所有四位数数字(全相同的除外),均能得到6174。输出掉进黑洞的步数。
输入
一个四位数,且各位数字不全相同。
输出
按题意操作的步数
样例输入
6471
样例输出
1
解答思路:
先通过排序获取最大值最小值进行相减,然后用while循环判断是否为6174。
比如输入5400.计算过程是这样的。最后一个输出的是次数
C源代码:
#include<stdio.h>
int sort(int n,int max)
{
int i,ii;
int temp,len=4;
int num[4]={0};
num[0]=n/1000;
num[1]=n/100%10;
num[2]=n/10%10;
num[3]=n%10;
for(i=0;i<len-1;i++) //冒泡排序法,从小到大
for(ii=0;ii<len-1-i;ii++)
if(num[ii]>num[ii+1])
{
temp = num[ii];
num[ii] = num[ii+1];
num[ii+1] = temp;
}
if(max==1)
return num[3]*1000 + num[2]*100 + num[1]*10 + num[0];//返回最大值
else
return num[0]*1000 + num[1]*100 + num[2]*10 + num[3];//返回最小值
}
int main(void)
{
int n,i;
int j=0;
scanf("%d",&n);
while(n!=6174)
{
//printf("%d-%d=%d\n",sort(n,1),sort(n,0),sort(n,1) - sort(n,0));
//这个是测试计算结果
n = sort(n,1) - sort(n,0); // max - min
j++;
}
printf("%d",j);
return 0;
}