递归题目
递归题目(华为机试)
题目描述
把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
题目描述
编写一个函数,传入一个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