今天有个面试,最后出了一个题,给我三分钟考虑时间,结果紧张没想出来,过后下楼在电梯里想明白了,半夜睡不着,必须编出来
题目:数字金字塔共有6层,最底层有6个正整数,这6个数字靠近的两个相加得到上一层的5个数字,同样这5个数字靠近的两个相加得到再上一层的4个数字。现在这个金字塔有些数字已经看不到了,你能根据已有的数字推算出其它数字吗?
逻辑很简单,14和5下面的俩问号看作是小金字塔了,但是14上面没有更大一点的金字塔了,所以先看5下面的就行
那30下面的问号也可以看作是中型金字塔,
它们的关系是这样
首先看,5下面的俩问号无非4种情况,1,4 /2,3 /3,2 /4,1,那把每一种情况都算出来之后,发现四种情况都ok,之后看14下面俩问号,无非13种情况,那最后就是13*4种组合,52种
想想就睡不着,这么简单居然当时没想出来
l1 = [181]
l2 = [None,None]
l3 = [None,None,30]
l4 = [None,None,None,None]
l5 = [14,None,None,None,5]
l6 = [None,None,None,4,None,None]
n = 1
for i in range(1,5):
l6[4] = i
l6[5] = 5-i
l5[3] = 4+l6[4]
l4[3] = l5[3] + 5
l4[2] = 30 - l4[3]
l5[2] = l4[2] - l5[3]
l6[2] = l5[2]-4
for j in range(1,14):
l6[0] = j
l6[1] = 14-j
l5[1] = l6[1] +l6[2]
l4[0] = 14+l5[1]
l4[1] = l5[1]+l5[2]
l3[0] = l4[0]+l4[1]
l3[1] = l4[1]+l4[2]
l2[0] = l3[0]+l3[1]
l2[1] = l3[1]+30
if (l2[0]+l2[1]) == 181:
print(l1)
print(l2)
print(l3)
print(l4)
print(l5)
print(l6)
print('这是第{}种情况'.format(n))
n += 1
print("总结:一共有{}种结果".format(n-1))