6174问题

来源:互联网 发布:mac下安装nodejs 编辑:程序博客网 时间:2024/06/02 21:01

题目大体

假设一个个位数字都不相同的四位数,把所有的数字从大到小排序后得到a,再从小到大排序后得到b,然后用a-b替换为原来的数,并且继续操作。

#include <iostream>#include <stdio.h>using namespace std;int getnext(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[j]>s[i])            {                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 a-b;}int main(){    int num[2000];    int count;    cin>>num[0];    cout<<num[0];    count=1;    for(;;)    {        num[count]=getnext(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;}