题目大概: 输入一个四位数,这个数的个个位数的数重新排列,最大的数减去最小的数,输出,知道变为6174. 输出输出的数的个个数。 思路: 按照想法,建一个函数,把个个位数分离,排序,相减,最后和6174比较,决定是继续调用这个函数重复操作,还是返回6174. 感想: 原来递推递归中也有想法题。 代码: #include <iostream> #include <algorithm> using namespace std; int k; int f(int n) {k++; int a[4],j=1,c; int ma=0,mi=0; for(int i=0;i<4;i++) {a[i]=n%10; n=n/10; } sort(a,a+4); for(int i=0;i<4;i++) {ma=ma+a[i]*j; j=j*10; } j=1; for(int i=3;i>=0;i--) {mi=mi+a[i]*j; j=j*10; } c=ma-mi; if(c==6174)return c; else {cout<<c<<" ";return f(c);} } int main() {int n; while(cin>>n) {k=0; cout<<f(n)<<" "<<endl; cout<<k<<endl; } return 0; }