首先从输入1推断出每0.1原料可以生产出11块巧克力,那么Chocolate number = material * 110
而后还是样本1 可以推断出小型盒子可以存放的巧克力数量 为11
然后再从输入2和3 可以解出大盒子可以装多少巧克力
然后重点就在于怎么计算盒子的分配,这个问题跟鸡兔同笼的问题非常相像,,可以用计算思想转化为算法。
有的时候并不能计算出整数,这个时候可以取整, 分别看用取整算出的rest小 还是 取整 +1 rest小哪个小用哪个
注意取整是指代码的取整,根据编译环境可能不同,这里指的取整是直接去掉小数部分
蛮力计算,没有使用好的算法,很多地方也可以优化
# python 3.5
# 计算巧克力数量
weight = float(input("Input material weight:"))
chocolate_num = round(weight / (0.5 / 55)) # round()函数四舍五入
print('chocolate num = % d' % chocolate_num)
# 盒子分配
# 大盒24, 小盒11, 剩余最少
# 24x + 11y - chocolate_num 值最小
# 以大盒为准判断小盒数
ret1 = [] # 不同x的情况
ret2 = [] # 不同x的情况剩余的最小数
x = 0 # 大盒数量
while x * 24 <= chocolate_num:
if x * 24 == chocolate_num:
ret1.append([x, 0, 0])
ret2.append(0)
else:
y = 0 # 小盒数量
res1 = []
res2 = []
while 24 * x + 11 * y <= chocolate_num:
res2.append(chocolate_num - (24 * x + 11 * y))
res1.append([x, y, chocolate_num - (24 * x + 11 * y)])
y += 1
min_num = min(res2)
for i in res1:
if i[2] == min_num:
ret1.append(i)
ret2.append(min_num)
x += 1
# 取最小的情况
res = []
min2_num = min(ret2)
for i in ret1:
if i[2] == min2_num:
res.append(i)
# print(res)
# 按小盒升序输出
list1 = []
for j in range(len(res)):
list1.append(res[j][1])
list1.sort()
for i in list1:
for j in res:
if j[1] == i:
print('Little box={}, big box={}, rest={}'.format(j[1], j[0], j[2]))
res.remove(j)