洛谷_P2437 蜜蜂路线_python写法_高精度加法

目录

1. 40分代码

2.高精度加法

3.全AC代码

4.惊掉下巴的解法



P2437 蜜蜂路线 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

1. 40分代码

m, n = map(int,input().split())

ans = 0
d = [1,2]
flag = [0 for _ in range(n+1)]
def fun(step):
    global ans
    if step == n:
        ans += 1
        return
    for i in d:
        di = step+i
        if 0<di<=n and flag[di] == 0:
            flag[di] = 1
            fun(di)
            flag[di] = 0

fun(m)
print(ans)

2.高精度加法

看网上的解法是有关高精度加法,那我们就先来学习一下什么是高精度加法。

蓝桥杯-Python-高精度加法 - 知乎 (zhihu.com)

A = list(input())
B = list(input())
l = abs(len(A)-len(B))
# 这里插0是因为可能下一位会有进位
for i in range(l):
    if len(A)>len(B):
        B.insert(0,0)
    else:
        A.insert(0,0)
C = []
r = 0
for x,y in zip(A[::-1],B[::-1]):
    # 一位一位对应相加
    print(f'{x},{y}')
    ss = int(x)+int(y)+r
    # 进位
    if ss>=10:
        r = ss//10
    else:
        r = 0
    C.insert(0,str(ss%10))
C.insert(0,str(r))
print(int(''.join(C)))

知识点:

"""
zip函数的使用
zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。
如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操作符,可以将元组解压为列表。
"""
# zip函数的返回值
l1 = [1, 2, 3]
l2 = [4, 5, 6]
l3 = [7, 8, 9, 10]
zipped = zip(l1,l2)
print(zipped)   #返回的是一个对象——<zip object at 0x000002903F8A2040>

# zip的使用
print(list(zipped)) #[(1, 4), (2, 5), (3, 6)]
print(list(zip(l1,l3))) #元素个数与较短的一致 [(1, 7), (2, 8), (3, 9)]
# *zip解压为列表
ll1, ll2 = zip(*zip(l1,l2))
print(list(ll1))    #[1, 2, 3]
print(list(ll2))    #[4, 5, 6]

3.全AC代码

n, m = map(int,input().split())

dp = ['0' for _ in range(m+10)]
dp[n] = '1'
dp[n+1] = '1'

def ADD(x,y):
    x = list(x)
    y = list(y)
    l = abs(len(x) - len(y))
    for i in range(l):
        if len(x)>len(y):
            y.insert(0,0)
        else:
            x.insert(0,0)
    c = []
    r = 0
    for xx, yy in zip(x[::-1],y[::-1]):
        ss = int(xx)+int(yy)+r
        if ss>=10:
            r = ss//10
        else:
            r = 0
        c.insert(0,str(ss%10))
    c.insert(0,str(r))
    return int(''.join(c))

for i in range(n+2,m+1):
    dp[i] = ADD(str(dp[i-1]),str(dp[i-2]))
# print(type(dp[m]))
print(dp[m])

4.惊掉下巴的解法

用python解题的时候还是不能太用C++的思想去,python实在是强大。

n, m = map(int, input().split())
dp = ['0' for _ in range(m + 10)]
dp[n] = 1
dp[n + 1] = 1
for i in range(n + 2, m + 1):
    dp[i] = dp[i - 1]+dp[i - 2]
print(dp[m])

  • 23
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hooray11

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值