遞推遞歸練習J


任意一個4位自然數N(N不能是4個數字一樣,如1111、2222、….9999是不可以的,N也不能是6174),將組成自然數N的4個數字重新排列,形成一個最大數和最小數,最大數和最小數相減,其差還是自然數,將差的各數字再重新排列,又形成一個最大數和最小數,最大數和最小數相減,其差還是自然數。反復進行,直到差是一個神秘數6174(數學黑洞)結束。

Input

輸入數據有多組,每組占一行,每行包含一個4位自然數N。輸入文件直到EOF為止!

Output

對每組輸入,輸出有2行。第一行是所有的差,以空格分隔,最后一個數后也有空格;第二行是差的個數。

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
解題思路:

調用函數,用一數組存放這個四位數,然后做差判斷差的情況,如果為終止數則return,終止函數,否者在調用函數,進行類似遞歸的操作。

注意:細節處理要處理好

代碼:

#include<bits/stdc++.h>
using namespace std;
int a[5];
int num;
void cha(int n)
{
    int k=1;
    while(n)
    {
        a[k++]=n%10;
        n=n/10;
    }
    sort(a,a+k);
    int ma,mi;
    mi=a[1]*1000+a[2]*100+a[3]*10+a[4];
    ma=a[4]*1000+a[3]*100+a[2]*10+a[1];
    int m=ma-mi;
    num++;
    cout<<m<<" ";
    if(m<1000)
        m=m*10;
    if(m==6174)
    {
        cout<<endl<<num<<endl;
       return;
    }
    cha(m);
}
int main()
{
    int n;
    while(cin>>n)
    {
        num=0;
        cha(n);
    }
}





注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com