题解 | #放苹果# 高中生看得懂:盘子个数/n元 1次方程的非负整数解的个数, 递归 python

放苹果

http://www.nowcoder.com/practice/bfd8234bb5e84be0b493656e390bdebf

求fun(app, d):
(按题意:app>=0,d>=1,但代码中有app-d,不能保证输入的app>0, 而题目确保d>=1,递归出口有d=1, 且所以d不会再小)

拆分成2种情况(不重不漏):
1.某些盘子没有app。具体哪些盘子空着?不管。只要1个盘子没有app,则满足这点。其他的盘子的情况?问老爸(下一轮迭代)
2.所有盘子都有app。往每个盘子仍1个app。则满足了这点。各盘子有多少app?问老爸(下一轮迭代)
return fun(app,d-1)+fun(app-d,d)

递归出口:
1.app <0:d个非负整数 求和为负数 的一次方程,无解。return 0
2.app==0,错误理解:“没苹果了,没法分,解决方法数为0”。

if app==0:
    return 0

但其实,a1+a2+...+an = 0这个方程有1个解。全0解。retunr 1才对。

  1. app>0, d==1: return 1
    理解方法:方程a1 = app, 解只有一个,就是a1 = app。

python:


def fun(app, d):
    if app <0:
        return 0
    else:
        #这行改成 if app==0也行,但要多跑几遍fun(app,d-1)直到 d=1
        if  app==1 or app==0:
            return 1
        else:
            if d==1 :
                return 1
            else:
                return fun(app,d-1)+fun(app-d,d)

while 1:
    try:
        l=input().split(' ')
        app,d=tuple(map(int,l))
        print(fun(app,d))
    except:
        break
全部评论

相关推荐

09-13 17:43
已编辑
北京化工大学 硬件开发
易才一飞:感觉项目写细节一些吧,掌握技能和校内经历感觉占比太大,而且这是找嵌软还是硬件呢,似乎大家都说要有针对的写相关技术才好吧
点赞 评论 收藏
分享
09-11 10:30
门头沟学院 C++
隔壁刷到的,请问几年前真的是这样吗
智能搬砖:21年已经有点难了,后面越来越难,主要是入行的卷王太多了,前几年培训机构搞宣传火了一波,像张雪峰有两年都在推计算机,进去的几百万卷王还没毕业呢,起码还要再卷五六年,到时候估计大厂就只要985了,211也得来跟我们卷外包了😂
我的秋招日记
点赞 评论 收藏
分享
评论
5
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务