PAT乙級真題 C 數字黑洞

2021-10-10 17:23:45 字數 2312 閱讀 3089

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

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

7766 - 6677 = 1089

9810 - 0189 = 9621

9621 - 1269 = 8352

8532 - 2358 = 6174

7641 - 1467 = 6174

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

輸入給出乙個(0, 10000)區間內的正整數n。

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

7766 - 6677 = 1089

9810 - 0189 = 9621

9621 - 1269 = 8352

8532 - 2358 = 6174

需要注意幾個地方:

c++版本:

#include

#include

#include

#include

using

namespace std;

//數字降序排序

intgetmax

(int num)

sort

(v.begin()

,v.end()

);while

(v.size()

<4)

return v[0]

+10*v[1]+

100*v[2]

+1000

*v[3];

}//數字公升序排序

intgetmin

(int num)

sort

(v.begin()

,v.end()

);while

(v.size()

<4)

return v[3]

+10*v[2]+

100*v[1]

+1000

*v[0];

}//列印輸出數字,不足四位數則補齊

void

print

(int num)

else

if(num<

100)

else

if(num<

1000

) cout<}int

main()

print

(max)

; cout<<

" - "

;print

(min)

; cout<<

" = "

;print

(max-min)

; cout

if(num==

6174

)break;}

}

在討論區看到乙個python版本**,深感簡潔度上的差距。一併貼在這裡,作為啟發。

num =

input()

defcalc

(num):if

len(

set(num))==

1:print

(num +

" - "

+ num +

" = 0000"

)return

"6174"

else

: num1 =

"".join(

sorted

(num, reverse=

true))

num2 =

"".join(

sorted

(num)

) result =

str(

int(num1)

-int

(num2)

)print

(num1 +

" - "

+ num2 +

" = "

+ result)

return result

num=calc(num.ljust(4,

"0")

)while num !=

"6174"

: num = calc(num.ljust(4,

"0")

)

PAT 乙級真題 1009 1019 數字黑洞

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

PAT乙級真題 1019 數字黑洞 C 實現

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

PAT乙級真題 1019 數字黑洞 20分

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