题解 | #放苹果# 高中生看得懂:盘子个数/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
全部评论

相关推荐

找个工作&nbsp;学历是要卡的&nbsp;要求是高的&nbsp;技能不足是真的&nbsp;实习经验是0的&nbsp;简历无处可写是事实的&nbsp;钱不好赚是真的&nbsp;想躺平又不敢躺&nbsp;也不甘心躺&nbsp;怕自己的灵感和才华被掩埋甚至从未被自己发现&nbsp;又质疑自己是否真正有才华
码农索隆:你现在啊,你心里都明白咋回事,但是你没办法改变现状,一想到未来,你又没有信心狠下心来在当下努力。 得走出这种状态,不能一直困在那里面,哪不行就去提升哪,你一动不动那指定改变不了未来,动起来,积少成多才能越来越好
点赞 评论 收藏
分享
测试糕手手:社会第一课,随便吹牛逼,直接说四个月,别老实。老实人只会被欺负
点赞 评论 收藏
分享
06-10 23:36
已编辑
首都经济贸易大学 C++
点赞 评论 收藏
分享
评论
5
1
分享

创作者周榜

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