閱讀738 返回首頁    go 阿裏雲 go 技術社區[雲棲]


6174問題

6174問題

時間限製:1000 ms  |  內存限製:65535 KB
描述

假設你有一個各位數字互不相同的四位數,把所有的數字從大到小排序後得到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 <iostream>
#include <algorithm>
using namespace std;

int main()
{
    int sample;
    cin >> sample;

    while (sample--)
    {
        int num[4];
        int n, t = 0;

        cin >> n;

        t = n;
        int max, min, cnt = 0;
        while (t != 6174)
        {
            for (int i = 0; i < 4; i++)
            {
                num[i] = n % 10;
                n /= 10;
            }
            sort(num, num+4);//從小到大排序
            min = num[0] * 1000 + num[1] * 100 + num[2] * 10 + num[3];
            max = num[3] * 1000 + num[2] * 100 + num[1] * 10 + num[0];
            t = max - min;
            n = t;
            cnt ++;
        }
        cout << cnt+1 << endl;
    }

    return 0;
}



最後更新:2017-04-02 15:14:57

  上一篇:go Android——搖一搖
  下一篇:go 1102: 數字反轉