c程序新手 想问问这个问题怎么写?

图片说明

首先从输入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)