任选4个不完全相同的数字(像1111就不行),让“最大排列”减“最小排列”(例如8753-3578),不断重复这个动作,最后一定会得到相同的结果:6174。
#include <stdio.h>
int convert(int number[],int ans);
int *sort(int number[],int len);
int main(void)
{
int number[4] = {0};
int *p = NULL;
int n = 0;
int ans = 0;
int count = 0;
//n=6610;
ans = n;
while(ans!=6174)
{
ans = convert(number,ans);
printf("第%d次:%d\n\n",count
+1,ans
);
++count;
}
printf("经过了%d次最大减最小的动作\n",count
);
return 0;
}
int *sort(int number[],int len) //大到小的排序
{
int a =0;
for(int i=0; i<len; ++i)
{
for(int j=i+1;j<len;++j)
{
if(number[i] <number[j])
{
a = number[i];
number[i] = number[j];
number[j] = a;
}
}
}
return number;
}
int convert(int number[],int ans)//每次变换得到的数字
{
int *p = NULL;
int m=0;
number[0] = ans/1000; //把这个数放入数组
number[1] = ans%1000/100;
number[2] = ans%100/10;
number[3] = ans%10;
p = sort(number,4);
m=(*p*1000+*(p+1)*100+*(p+2)*10+*(p+3))- ( *(p+3)*1000+*(p+2)*100+*(p+1)*10+*p);//最大数字减去最小数字
printf("%d-%d=%d\n",(*p
*1000+*(p
+1)*100+*(p
+2)*10+*(p
+3)),( *(p
+3)*1000+*(p
+2)*100+*(p
+1)*10+*p
),m
);
return m;
}