1 条题解

  • 0
    @ 2023-5-22 13:19:50
    /*
    这个问题的解决思路如下:
    
    输入四位数。
    定义一个变量 count 记录转换的次数,初始化为0。
    进入一个循环,只要当前数不等于6174,就进行以下步骤:
        将这个四位数分解为四个个位数。
        对这四个数进行排序。
        构造两个新的数:一个是按照降序排序的四位数,另一个是按照升序排序的四位数。
        计算这两个数的差,更新当前的四位数。
        count 加1。
    输出 count。
    
    */
    #include <iostream>
    #include <algorithm>
    using namespace std;
    
    // 将整数n分解为四个数
    void split(int n, int num[4]) {
        for (int i = 0; i < 4; ++i) {
            num[i] = n % 10;
            n /= 10;
        }
    }
    
    // 将四个数组合成一个整数
    int combine(int num[4]) {
        int res = 0;
        for (int i = 0; i < 4; ++i) {
            res = res * 10 + num[i];
        }
        return res;
    }
    
    int main() {
        int n;
        cin >> n;
    
        int count = 0;
        while (n != 6174) {
            int num[4];
            split(n, num);
            sort(num, num + 4);
            int small = combine(num);
            reverse(num, num + 4);
            int big = combine(num);
            n = big - small;
            ++count;
        }
    
        cout << count << endl;
    
        return 0;
    }
    
    • 1

    信息

    ID
    1036
    时间
    1000ms
    内存
    128MiB
    难度
    10
    标签
    递交数
    1
    已通过
    1
    上传者