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)
'''

猜你喜欢

转载自blog.csdn.net/qq_43549984/article/details/84987279