zoukankan      html  css  js  c++  java
  • 1069. The Black Hole of Numbers (20)【模拟】——PAT (Advanced Level) Practise

    题目信息

    1069. The Black Hole of Numbers (20)

    时间限制100 ms
    内存限制65536 kB
    代码长度限制16000 B

    For any 4-digit integer except the ones with all the digits being the same, if we sort the digits in non-increasing order first, and then in non-decreasing order, a new number can be obtained by taking the second number from the first one. Repeat in this manner we will soon end up at the number 6174 – the “black hole” of 4-digit numbers. This number is named Kaprekar Constant.

    For example, start from 6767, we’ll get:

    7766 - 6677 = 1089
    9810 - 0189 = 9621
    9621 - 1269 = 8352
    8532 - 2358 = 6174
    7641 - 1467 = 6174
    … …

    Given any 4-digit number, you are supposed to illustrate the way it gets into the black hole.

    Input Specification:

    Each input file contains one test case which gives a positive integer N in the range (0, 10000).

    Output Specification:

    If all the 4 digits of N are the same, print in one line the equation “N - N = 0000”. Else print each step of calculation in a line until 6174 comes out as the difference. All the numbers must be printed as 4-digit numbers.

    Sample Input 1:
    6767
    Sample Output 1:
    7766 - 6677 = 1089
    9810 - 0189 = 9621
    9621 - 1269 = 8352
    8532 - 2358 = 6174
    Sample Input 2:
    2222
    Sample Output 2:
    2222 - 2222 = 0000

    解题思路

    直接计算就可以

    AC代码

    #include <cstdio>
    #include <algorithm>
    using namespace std;
    int getmin(int a){
        int t[4] = {0}, c = 0;
        while (a){
            t[c++] = a%10;
            a /= 10;
        }
        sort(t, t + 4);
        c = 0;
        while (c < 4){
            a = a*10 + t[c++];
        }
        return a;
    }
    int getmax(int a){
        int t[4] = {0}, c = 0;
        while (a){
            t[c++] = a%10;
            a /= 10;
        }
        sort(t, t + 4, greater<int>());
        c = 0;
        while (c < 4){
            a = a*10 + t[c++];
        }
        return a;
    }
    
    int main()
    {
        int a;
        scanf("%d", &a);
        while (true){
            int mn = getmin(a);
            int mx = getmax(a);
            printf("%04d - %04d = %04d
    ", mx, mn, mx - mn);
            a = mx - mn;
            if (a == 6174 || mn%10 == mn/1000) break;
        }
        return 0;
    }

    个人游戏推广:
    《10云方》与方块来次消除大战!

  • 相关阅读:
    bzoj 1176 cdq分治套树状数组
    Codeforces 669E cdq分治
    Codeforces 1101D 点分治
    Codeforces 1100E 拓扑排序
    Codeforces 1188D Make Equal DP
    Codeforces 1188A 构造
    Codeforces 1188B 式子转化
    Codeforces 1188C DP 鸽巢原理
    Codeforces 1179D 树形DP 斜率优化
    git commit -m "XX"报错 pre -commit hook failed (add --no-verify to bypass)问题
  • 原文地址:https://www.cnblogs.com/zhchoutai/p/7238711.html
Copyright © 2011-2022 走看看