360在线编程2017秋招——粉笔装盒子

360在线笔试17年秋招——卖粉笔

问题:

粉笔装箱问题,有n个彩色粉笔,m个白色粉笔,其中a只彩色粉笔与b只白色粉笔可以装入一个盒子c只白色粉笔可以装入一个盒子,d只彩色粉笔可以装入一个盒子,三种盒字的粉笔分别买x,y,z元,求如和装箱使最大收益

思路:

感觉是一个循环分配问题,求所有可能的分配,然后找出最大值,主要在于混合盒子的个数,混合盒子个数确定了,白色盒子与粉丝盒子的个数自然就确定了

## 设置输入方式:
nm = input()    ## 输入n:彩色粉笔的个数  输入m:白色粉笔的个数
abcd = input()  ## 输入每个盒子的粉笔数:a+b:表示混合粉笔盒子的彩色粉笔数+白色粉笔数;c:表示白色盒子粉笔数; d:表示彩色盒子粉笔数
xyz = input()   ## 输入每个盒子的单价:x:混合盒子的单价; y:白色盒子的单价; z:彩色盒子的单价
## 转换为数值型
nm = [int(i) for i in nm.split(" ")]     
abcd = [int(i) for i in abcd.split(" ")]
xyz = [int(i) for i in xyz.split(" ")]

n = nm[0]
m = nm[1]

a = abcd[0]
b = abcd[1]
c = abcd[2]
d = abcd[3]

x = xyz[0]
y = xyz[1]
z = xyz[2]

all_sum = [] ## 用以存储每次分配下的总收益
i = 0        ## 设置循环变量:表示混合盒子的个数
res1 = n     ## 设置彩色剩余粉笔数:初始值为n
res2 = m     ## 设置白色剩余粉笔数:初始值为m
## 循环用以求每次分配下的总收益
while res1>=a and res2>=b:  ## 循环条件
    sum_s = i*x              ## 计算i个混合盒子时,混合颜色盒子的总收益
    num_1 = a*i              ## 计算i个混合盒子时,彩色粉笔的使用量
    num_2 = b*i              ## 计算i个混合盒子时,白色粉笔的使用量
    res1 = res1-num_1        ## 计算i个混合盒子时,彩色粉笔的剩余量
    res2 = res2-num_2        ## 计算i个混合盒子时,白色粉笔的剩余量
    sum_w = (res2//c)*y       ## 计算i个混合盒子时,剩余的白色粉笔装盒的总收益
    sum_r = (res1//d)*z       ## 计算i个混合盒子时,剩余的红色粉笔装盒的总收益
    sss = sum_s+sum_w+sum_r  ## 计算i个混合盒子时,总收益
    all_sum.append(sss)      ## 每次循环用以存储改分配下的总收益
    i = i+1
## 求所有分配的收益最大值,并输出:    
out = max(all_sum)
print(out)
5 5
1 2 2 2
1 2 3
10

你可能感兴趣的:(python算法)