1. 程式人生 > >Python挑戰之“比比誰更短”(12.13)

Python挑戰之“比比誰更短”(12.13)

Python挑戰之“比比誰更短”(12.13)

寫在前面

本挑戰旨在訓練對Python簡潔性的理解程度,請你在程式設計的過程中儘量使得程式碼行數更短(是行數而不是字數)。最好在程式碼後面附一份正常的寫法,防止日後想用此題卻因為那糟糕的可讀性而浪費時間。另外,本人僅僅是一個初學Python的大一新生,如果給出的程式碼有錯誤或有誤導他人的地方,歡迎大佬指出,一定改正。
注意 本挑戰僅限娛樂,請在作業和考試中不要一味地為了短而降低程式碼的可讀性。

Description

如果一個數滿足以下性質,則稱這個數是好的:

1.是四位數;
(這裡的幾位數和難度有關,請儘量保證你的程式碼具有普適性,不要寫僅僅針對這一條題目的程式碼,下同)

2.在16進位制、10進位制、12進位制下的各位之和相等。

比如,2991的各位之和為2+9+9+1=21,它的12進製為1893,各位之和也為21,但是它的16進位制BAF的各位之和為11+10+15=36,所以2991不是好的。

請你程式設計找到所有的好數。

Input

沒有輸入。

Output

所有的好數,一行一個。

參考程式碼

#from math import log
#def fsum(n,f):return sum(n//f**i%f for i in range(4//log(f,10))) def fsum(n,f,a=0):return fsum(n//f,f,a+n%f) if n else a for x in [i for i in range(10**(4-1),10**4) if fsum(i,16)==fsum(i,12)==fsum(i,10)]:print(x) ''' def fsum(n,f): ans=0 while n!=0: ans+=n%f n//=f return ans for i in range(1000,10000): if fsum(i,16)==fsum(i,12)==fsum(i,10): print(i) '''