Python挑戰之“比比誰更短”(12.13)
阿新 • • 發佈:2018-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)
'''