1. 程式人生 > >1069. The Black Hole of Numbers (20)【模擬】——PAT (Advanced Level) Practise

1069. The Black Hole of Numbers (20)【模擬】——PAT (Advanced Level) Practise

int exce 個人 esp ack ble sam namespace constant

題目信息

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\n", mx, mn, mx - mn);
        a = mx - mn;
        if (a == 6174 || mn%10 == mn/1000) break;
    }
    return 0;
}

個人遊戲推廣:
技術分享《10雲方》與方塊來次消除大戰!

1069. The Black Hole of Numbers (20)【模擬】——PAT (Advanced Level) Practise