题目简述:一个四位数重新排列,最大数减去最小数得到自然数,重复该过程,最后得到6174。
解题思路:
1、既然是一个四位数,又要最大➖最小,所以考虑首先要把这四位数分开,然后求得其最大值和最小值,然后相减,重复该过程。
2、分开和组合,可以用循环来解决。
3、直到得到6174,结束循环。
4、注意输出:输出每一个得到的数然后输出有多少个数。
源代码:
#include <bits/stdc++.h>
using namespace std;
int main()
{
int a,c;
while (cin>>a)
{
vector <int> b;
int d,e,sum=0;
while (a!=6174)
{
b.clear();
int i=0;
while (a)
{
c=a%10;
b.push_back(c);
a=a/10;
i++;
}
if (i==3)
b.push_back(0); //如果减完只有三位数,则需要加一个0
sort (b.begin(),b.end()); //对数组元素进行小到大排序,因为要用最大减最小
d=b[0]*1000+b[1]*100+b[2]*10+b[3]; //求最小值
e=b[3]*1000+b[2]*100+b[1]*10+b[0];// 求最大值
a=e-d;
cout<<a<<" ";
sum++;
}
cout<<endl<<sum<<endl;
}
return 0;
}
输入输出样例:
Sample Input
1000 1500 3000
Sample Output
999 8991 8082 8532 6174 5 5085 7992 7173 6354 3087 8352 6174 7 2997 7173 6354 3087 8352 6174 6