递归题目

递归题目(华为机试)

  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
全部评论

相关推荐

牛客101244697号:这个衣服和发型不去投偶像练习生?
点赞 评论 收藏
分享
专心打鱼:互联网搬运工,贴子都要偷
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务