6174问题

来源:互联网 发布:全民超神刷钻石软件 编辑:程序博客网 时间:2024/06/05 11:28

6174问题

内容描述
假设你有一个各位数字互不相同的四位数,把所有的数字从大到小排序后得到a,从小到大后得到b,然后用a-b替换原来这个数,并且继续操作。例如,从1234出发,依次可以得到4321-1234=3087、8730-378=8352、8532-2358=6174,又回到了它自己!现在要你写一个程序来判断一个四位数经过多少次这样的操作能出现循环,并且求出操作的次数

比如输入1234执行顺序是1234->3087->8352->6174->6174,输出是4

输入
第一行输入n,代表有n组测试数据。
接下来n行每行都写一个各位数字互不相同的四位数

输出
经过多少次上面描述的操作才能出现循环

样例输入
1
1234

样例输出
4

代码示例

#include<stdio.h>int compare(int number){    int i,j,t;    int one,two,three,four;    int a[100];    int smaller,bigger;    int number_t;    a[0]=one=number%10;    a[1]=two=number/10%10;    a[2]=three=number/10/10%10;    a[3]=four=number/1000;    for(i=0;i<=3;i++){        for(j=0;j<=3-i-1;j++){            if(a[j]>=a[j+1]){                t=a[j+1];                a[j+1]=a[j];                a[j]=t;            }        }    }    smaller=a[0]*1000+a[1]*100+a[2]*10+a[3];    bigger=a[3]*1000+a[2]*100+a[1]*10+a[0];    //printf("smaller=%d,bigger=%d\n",smaller,bigger);    number_t=bigger-smaller;    return number_t;}int main(){    int number,number_t;    int n;    int k;    scanf("%d",&n);    while(n!=0){        k=1;        scanf("%d",&number);        number_t=compare(number);        while(1){            if(number_t!=6174){           //     printf("%d\n",number_t);                k++;                number_t=compare(number_t);            }            else break;        }        printf("%d\n",++k);        n--;        }return 0;}