有重量分别为 3,5,7 公斤的三种货物,和一个载重量为 X 公斤的箱子(不考虑体积等其它因素,只计算重量)
需要向箱子内装满X公斤的货物,要求使用的货物个数尽可能少(三种货物数量无限)
数据范围:
输入箱子载重量(一个整数)。
如果无法装满,输出 -1。
如果可以装满,输出使用货物的总个数。
4
-1
无法装满
8
2
使用1个5公斤,1个3公斤货物
递归 #coding=utf-8 def k5(n):#对于5与3的分配 d,f,r=n%5,1,n//5#对n取余 while d%3!=0:#如果余数是3的倍数就可以组合 d+=5#如果不是就加5 r-=1 if d>n:#直到超过n那就说明不能组合 f=0 return -1 break if f: return d//3+r#d//3是3个数,r是5的个数 def k7(n):#对于7与(5&3)的分配 d,f,re=n%7,1,n//7#对n取余 while k5(d)==-1:#如果余数是可以用3与5组合,那么就成立 d+=7#不能组合就加7 re-=1 if d>n:#超过时候不能成立 f=0 return -1 break if f: return k5(d)+re#k5(d)是5与3组合后总数,re是7的个数 while 1: try: x=int(input()) print(k7(x)) except: break