1. 程式人生 > >南陽oj 57題------6174問題

南陽oj 57題------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

題目連結:http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=57

分析:四位數拆分排序 排序還可用冒泡法排

程式碼:

#include <stdio.h>
int main()
{
    int  a,b,c,d,m,n,i,t,j,k,l,g;
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        g=1;
        scanf("%d",&m);
        while(m!=6174)
        {
        a=m%10;
        b=m/10%10;
        c=m/100%10;
        d=m/1000;
        if(a>b)
        {
            t=a;
            a=b;
            b=t;
        }
        if(a>c)
        {
            t=a;
            a=c;
            c=t;
        }
        if(a>d)
        {
            t=a;
            a=d;
            d=t;
        }
        if(b>c)
        {
            t=b;
            b=c;
            c=t;
        }
        if(b>d)
        {
            t=b;
            b=d;
            d=t;
        }
        if(c>d)
        {
            t=c;
            c=d;
            d=t;
        }
        j=a*1000+b*100+c*10+d;
        k=d*1000+c*100+b*10+a;
        m=k-j;
        g++;
        }
        printf("%d\n",g);
    }
    return 0;
}