PTA 1019 數字黑洞 20分

2021-10-23 15:02:00 字數 1969 閱讀 7572

給定任乙個各位數字不完全相同的 4 位正整數,如果我們先把 4 個數字按非遞增排序,再按非遞減排序,然後用第 1 個數字減第 2 個數字,將得到乙個新的數字。一直重複這樣做,我們很快會停在有「數字黑洞」之稱的 6174,這個神奇的數字也叫 kaprekar 常數。

例如,我們從6767開始,將得到

7766 - 6677 = 1089

9810 - 0189 = 9621

9621 - 1269 = 8352

8532 - 2358 = 6174

7641 - 1467 = 6174

… …現給定任意 4 位正整數,請編寫程式演示到達黑洞的過程。

輸入格式:

輸入給出乙個 (0,10^​4​​ ) 區間內的正整數 n。

輸出格式:

如果 n 的 4 位數字全相等,則在一行內輸出 n - n = 0000;否則將計算的每一步在一行內輸出,直到 6174 作為差出現,輸出格式見樣例。注意每個數字按 4 位數格式輸出。

輸入樣例 1:

6767

輸出樣例 1:

7766 - 6677 = 1089

9810 - 0189 = 9621

9621 - 1269 = 8352

8532 - 2358 = 6174

輸入樣例 2:

2222

輸出樣例 2:

2222 - 2222 = 0000

題目分析

這個題有個容易忽視的問題,剛開始我以為題目說的四位整數是那種首位數字不是零的整數,後面**寫出來,給的兩個輸出樣例都正確,但還是有兩個測試點過不了,又再讀了一遍題目,原來輸入數的範圍是0~10000,後面將陣列a[4]先賦值為零就可以了。真是要認真讀題,不要想當然呀。不多說了,上**。

#include

#include

#include

#include

#include

using

namespace std;

bool

cmp(

int a,

int b)

intmain()

; cin>>n;

n1=n;

dosort

(a,a+4)

; n1=

0,n2=0;

for(i=

0;i<

4;i++

) n1=n1+

pow(10,

3-i)

*a[i]

;sort

(a,a+

4,cmp)

;for

(i=0

;i<

4;i++

) n2=n2+

pow(10,

3-i)

*a[i]

; n=n2-n1;

printf

("%04d - %04d = %04d\n"

,n2,n1,n)

; i=0;

}while

(n!=

6174

&&n!=0)

;return0;

}

我看了一下其他博主寫的,有乙個呢稱叫柳婼的博主寫的,我覺得很巧妙,**也比較短。

#include

#include

using

namespace std;

bool

cmp(

char a,

char b)

intmain()

while

(s !=

"6174"

&& s !=

"0000");

return0;

}

從**可以看出,這位博主將stl掌握得很好,不說了,學習stl去了。

PTA 1019 數字黑洞 20 分

include include 直接對string排序 include using namespace std bool cmp char a,int b 降序排列 intmain printf 04d 04d 04d n n,m,n m s to string n m return0 bug在於沒...

PTA 1019 數字黑洞

給定任乙個各位數字不完全相同的 4 位正整數,如果我們先把 4 個數字按非遞增排序,再按非遞減排序,然後用第 1 個數字減第 2 個數字,將得到乙個新的數字。一直重複這樣做,我們很快會停在有 數字黑洞 之稱的 6174,這個神奇的數字也叫 kaprekar 常數。例如,我們從6767開始,將得到 7...

PTA 1019 數字黑洞 c語言)

分析 這道題其實並沒有什麼坑點,難度一般。我這裡是寫了兩個函式來分別派出來遞增和遞減。這個題可能唯一需要注意的就是排完序之後可能會出現0位於第一位導致自定義函式返回值就不是四位,後面輸出的時候記得補齊四位就可以 如下 includeint max int n t,s 0,i,j for i 0 i ...