笔试题:_递归笔试题:_数据_02

'''1.⼩⽩去附近店铺买橘⼦,⽬前商店做活动,提供捆绑打包销售,例如每袋3个和每
袋5个的形式出售。现⼩⽩只想购买n个橘⼦,同时想购买尽量少的袋数⽅便携带。如
果不能购买恰好n个橘⼦,就不会购买(可返回-1),求解输出最少的袋数。(例如:
18)
'''

# def getnum(n):
# '''
# 解题思路:
# 5的k倍 返回K
# 5的k倍+3 返回K+1
# 否则不购买 返回-1
# :param n:
# :return:
# '''
# n = int(n)
# if n%5 == 0:
# return n//5
# if n%5 == 3:
# return n//5+1
# return -1
# if __name__ == '__main__':
# for i in range(20):
# print(f'买{i}个橘子,最少袋数为{getnum(i)}')



'''
第二题:
⼩红去超时买玩具,⼝袋怀揣了n张钱,买了⼀个价值m的玩具。钱的⾯额可以
是1元、5元、10元、50元,⽽⼩红拥有的钱中有的⾯额可能没有,问,付钱的时
候,会有多少种可能的付费组合⽅式?
输⼊:输⼊两个数n(多少张钱),m(玩具的价格)
输出:请输出可能的组合⽅式数;
'''

# def outthings(n,m):
# '''
# n为张数,m为价格
# 满足两个等式,即可
# :param n:
# :param m:
# :return:
# '''
# for a in range(m//1+1):
# for b in range(m // 5 + 1):
# for c in range(m // 10 + 1):
# for d in range(m // 50 + 1):
# if (a+b+c+d) == n and (a*1+b*5+c*10+d*50) == m:
# print(f'{a}张1,{b}张5,{c}张10,{d}扎根50')
#
# if __name__ == '__main__':
# outthings(10,100)


'''
3.我们公司⽻⽑球队开始招新了,计划招收x⼈,每个⼈根据⽔平划分⾃⼰的级别
档位1~8级别
现计划按⼀下要求分成2个队伍(1队、2队)
1)1队的成员级别之和⼤于2对成员级别之和
2)1队的任意⼀名队员,如果分配他去到2队,1队的成员级别之和就会严格⼩于2对
成员级别之和
3)每个队员必须要加⼊⼀个队伍
现在有多少⽅案可以完成上⾯分配
例如招收4⼈,⽔平级别分别:5 4 7 6 有⼏种分队⽅案
'''
# def fun(arr,arr1,arr2):
# '''
# 这个考虑到4个for循环太麻烦了,决定用递归
# 递归把列表分为两组,
# 然后等分完以后进行判断,需要满足两个条件
# 1.1队的数据和 大于 2队的数据和
# 2.1队减去最小值 小于 2队加上1队的最小值
#
# :param arr:
# :param arr1:
# :param arr2:
# :return:
# '''
# if arr:
# for i in range(1,3):
# if i == 1:
# fun(arr[1:], arr1+[arr[0]], arr2)
# else:
# fun(arr[1:], arr1, arr2 + [arr[0]])
# else:
# if sum(arr1) > sum(arr2) and (sum(arr1) - min(arr1)) < (sum(arr2) + min(arr1)):
# print(arr,arr1,arr2)
#
# arr = [5,4,7,6]
# arr1,arr2 =[],[]
# fun(arr,arr1,arr2)


'''
4.
系统设计题
1)请分析题⽬需求,给出你认为合理的技术⽅案,技术⽅案格式可参考原公司;
2)请充分通过题⽬展现你的设计⽅法,设计理念。对于关键的技术选型,给出适当注
解;
需求描述:设计⼀个服务,任何⼈调⽤这个服务,都返回⼀个unique id,不能重复;
'''
'''
解:不会
'''
# class People():
# def __init__(self,ID):
# self.ID = ID

View Code

 

-----------------------------------------------------------------------------------------------------------------------------------------