递归题目

递归题目(华为机试)

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

相关推荐

本神尊:看来是没招到小红薯上的人
点赞 评论 收藏
分享
06-19 19:06
门头沟学院 Java
点赞 评论 收藏
分享
湫湫湫不会java:1.在校经历全删了2.。这些荣誉其实也没啥用只能说,要的是好的开发者不是好好学生3.项目五六点就行了,一个亮点一俩行,xxx技术解决,xxx问题带来xxx提升。第一页学历不行,然后啥有价值的信息也没有,到第二页看到项目了,第一个项目九点,第二个项目像凑数的俩点。总体给人又臭又长,一起加油吧兄弟
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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