gpt4 book ai didi

python - 从按钮 x 开始,在按钮 y 结束,z 号码长的电话号码排列

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:38:00 25 4
gpt4 key购买 nike

<分区>

我正在尝试找出给定 x、y 和 z 的可能排列总数。x 是初始数字,y 是最终数字,z 是按下的按钮总数。我应该像国际象棋中的骑士一样从一个数字移动到另一个数字,呈“L”形。例如,如果您刚拨了 1,那么您拨的下一个号码必须是 6 或 8。如果您刚拨了 6,则下一个号码必须是 1 或 7。目前,我的实现为我给出的所有数字输出正确答案。但是,它太慢了,因为计算时间是指数级的。我想知道的是我如何或多或少地在线性时间内计算它。 z 将始终介于 1 和 100 之间(含)。

##Computes the number of phone numbers one
##can dial that start with the digit x, end
##in the digit y, and consist of z digits in
##total. Output this number as a
##string representing the number in base-10.
##Must follow "knights rule" moves, like chess
##########_________##########
##########|1||2||3|##########
##########|_||_||_|##########
##########|4||5||6|##########
##########|_||_||_|##########
##########|7||8||9|##########
##########|_||_||_|##########
##########|_||0||_|##########
##########^^^^^^^^^##########
dict = {0: [4, 6], 1: [6, 8], 2: [7, 9], 3: [4, 8],
4: [0, 3, 9], 5: [], 6: [0, 1, 7], 7: [2, 6], 8: [1, 3],
9: [2, 4]}


def recAnswer(current, y, z, count, total):
if count == z and current == y:
total += 1
return total
count+=1
if count > z:
return total
for i in dict.get(current):
total = recAnswer(i, y, z, count, total)
return total

def answer(x, y, z):
if x == y:
if z%2 == 0:
return '0'
elif x == 5 or y == 5:
if z == 1 and x == y:
return '1'
else:
return '0'
elif x%2 != 0 and y%2 == 0:
if z%2 != 0:
return '0'
elif x%2 == 0 and y%2 != 0:
if z%2 != 0:
return '0'
elif x%2 == 0 and y%2 ==0:
if z%2 == 0:
return '0'
elif x%2 != 0 and y%2 != 0:
if z%2 == 0:
return '0'

total = recAnswer(x,y,z,1,0)
return str(total)

def test():
for i in xrange(1,15,1):
print i,":",answer(1,3,i)

print answer(6, 2, 5)
print answer(1, 6, 3)
print answer(1, 1, 99)


test()

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com