递归题目

递归题目(华为机试)

  1. 题目描述
    把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法。
    输入
    每个用例包含二个整数M和N。0<=m<=10,1<=n<=10。
    样例输入
    7 3
    样例输出
    8

解题思路:

代码如下:

def putApple(m,n):
        if n == 1 or m == 0 :
            return 1
        elif  m < 0 or n <= 0:
            return -1
        if n > m:
            return putApple(m,m)
        else:
            return putApple(m,n-1) + putApple(m-n,n)
while True:
    try:
        apple,n = map(int,input().split())
        print(putApple(apple, n))
    except:
        break
  1. 题目描述
    编写一个函数,传入一个int型数组,返回该数组能否分成两组,使得两组中各元素加起来的和相等,并且,所有5的倍数必须在其中一个组中,所有3的倍数在另一个组中(不包括5的倍数),能满足以上条件,返回true;不满足时返回false。

def judge(other,a):
    # a=0意味着能够分好fivetime = threetime
    if a == 0:
        return True
    # 进行递归判断
    if not other:
        return False
    value1=judge(other[1:],a)
    value2=judge(other[1:],a-other[0])
    return value1 or value2

while True:
    try:
        n = int(input())
        total = list(map(int,input().split()))
        fiveTime = 0
        threeTime = 0
        other = []
        for i in total:
            if i % 5 == 0:
                fiveTime += i
            elif i % 3 == 0:
                threeTime += i
            else:
                other.append(i)
        # 如果全部数据的总合不能分成2份
        if (fiveTime+threeTime+sum(other)) %2 != 0:
            print("false")
        # 可以分成2份进行递归判断
        else:
            balance = (fiveTime+threeTime+sum(other))/2-fiveTime
            print(str(judge(other,balance)).lower())

    except:
        break
全部评论

相关推荐

牛客464620405号:随便投,随便找,中国经过40多年的改革开放,人才缺口和职位空缺是巨大的,中国现在属于遍地黄金的年代,属于90后和00大机遇的时代
点赞 评论 收藏
分享
03-03 10:35
3d人士会梦见住进比弗利山庄吗:这四个项目属于是初学者的玩具了。不知道面试官咋问,而且双非本搞算法除了9,还是保守至少c9
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务