g = i % 10
s = i // 10 % 10
b = i // 100
suit1 = 2 * (s+b) + g # 5位数,除中间那个数外其他数出现过两遍
suit2 = 2 * (g+s+b) # 6位数,每个数都出现过两遍
if suit1 == su:
i = str(i)
num = int(i+i[:-1][::-1]) # i[:-1][::-1]表示得到除最后一个数外的倒序排列
result.append(num)
当su = 2 时,两种可能均可出现,所以这里不能用elif
if suit2 == su:
i = str(i)
num = int(i+i[::-1])
result.append(num)
result.sort()
for i in result:
print(i)
依据题意, 我们获取三位数中的每一位数上的数字,然后对他们求和比较看是否相等,如果相等则输出。
for i in range(100,1000):
g = i % 10
s = i // 10 % 10
b = i //100
if i == g ** 3 + s ** 3 + b ** 3:
print(i)
看到杨辉三角形我们很容易想到一个数等于它肩膀两数之和,通过这一性质可以得出每一行三角形元素的值。但是,这一次我没有用这个方法。
我们知道杨辉三角左右两边对称,因此我们只要求出左半部分就能得到一整行的元素了,杨辉三角还跟组合数有关,其里面的每一个元素都能用组合数表示。第N行的第M列可以表示成C(N-1,M-1),如6在第5行的第3列,它对应的组合数就是C(5-1,3-1),即C(4,2)。
因此,我们需要定义一个求组合数的函数。C(5,2) 可以表示成 (5 x 4) / (2 x 1) 也可以表示成(5/2)x (4/1)。那么我们的组合数可以这么写:
def C(a,b):
if b == 0:
return 1
if b > a: # 组合数性质(C(a,b) = C(a,a-b))
b = a - b
result = 1
for i in range(b): #
result *= a / b # 注意注意要用格式化函数,避免数据丢失
a -