6174问题

来源:互联网 发布:网络40大禁书海岸线 编辑:程序博客网 时间:2024/05/09 18:56

给你一四位数,然后把这个四位数分开,从大到小,从小到大,然后大的减去小的。比如1234变成4321-1234=3087,然后,8730-378=8352,8532-2358=6174,7641-1467=6174,又回到了6174.

分析:

#include <iostream>#include <stdio.h>#include <string.h>using namespace std;int f(int x){    int a,b;    char s[10];    sprintf(s,"%d",x);    int n=strlen(s);    for(int i=0; i<n; i++)    {        for(int j=i+1; j<n; j++)        {            if(s[i]>s[j])            {                char t=s[i];                s[i]=s[j];                s[j]=t;            }        }    }    sscanf(s,"%d",&a);    for(int i=0; i<n/2; i++)    {        char t=s[i];        s[i]=s[n-1-i];        s[n-1-i]=t;    }    sscanf(s,"%d",&b);    return b-a;}int main(){    int num[2000];    int count;    cin>>num[0];    cout<<num[0];    count=1;    while(1)//for(;;)    {        num[count]=f(num[count-1]);        cout<<"->"<<num[count];        int found=0;        for(int i=0; i<count; i++)        {            if(num[i]==num[count])            {                found=1;                break;            }        }        if(found)            break;        count++;    }    cout<<endl;    return 0;}


原创粉丝点击