题目要求:
某冶金工厂生产两类合金产品,分别为M1和M2。生产M1和M2时需要三种原材料
(含某种原材料的需求量为0的情形)。现有一批这样的原材料即将过期,
希望尽快用这些原材料生产M1和M2(每种原材料的数量均小于10000),请
给出浪费原材料总量最少(即三种剩余原材料的数量和最小)的生产方案。
如果方案不止一种,请输出M1生产量最少时所对应的方案。
输入说明:第一行给出生产M1所需的三种原材料数量,为整型数据;
第二行给出生产M2所需的三种原材料数量,为整型数据;
第三行给出三种原材料的库存数,为整型数据。
输出说明:输出满足条件时,M1、M2各自的生产数量(整数解)。
输入样例:
4 2 2
6 3 2
20 10 10
输出样例:2 2
代码图
代码如下
'''
某冶金工厂生产两类合金产品,分别为M1和M2。生产M1和M2时需要三种原材料
(含某种原材料的需求量为0的情形)。现有一批这样的原材料即将过期,
希望尽快用这些原材料生产M1和M2(每种原材料的数量均小于10000),请
给出浪费原材料总量最少(即三种剩余原材料的数量和最小)的生产方案。
如果方案不止一种,请输出M1生产量最少时所对应的方案。
输入说明:第一行给出生产M1所需的三种原材料数量,为整型数据;
第二行给出生产M2所需的三种原材料数量,为整型数据;
第三行给出三种原材料的库存数,为整型数据。
输出说明:输出满足条件时,M1、M2各自的生产数量(整数解)。
输入样例:
4 2 2
6 3 2
20 10 10
输出样例:2 2
'''
def main():
M1_1,M1_2,M1_3=map(int, input('M1需要的三种原材料分别为:').split(' '))
#M1_1,M1_2,M1_3为生产M1分别需要的三种原材料数量
M2_1,M2_2,M2_3=map(int, input('M2需要的三种原材料分别为:').split(' '))
#2_1,M2_2,M2_3为生产M2分别需要的三种原材料数量
M_1,M_2,M_3=map(int, input('三种原材料的库存分别为:').split(' '))
#M_1,M_2,M_3,分别为三种原材料的库存
M1,M2,M=10000,10000,10000#初始化,M1,M2为生产方案中M1,M2生产数量,M为库存剩余总量
m_1,m_2,m_3=M_1,M_2,M_3#为了循环中重置M_1,M_2,M_3
M1_max=min(M_1//M1_1,M_2//M1_2,M_3//M1_3)
for num1 in range(1,M1_max):#以M1数量从1到最大进行循环遍历
M_1=M_1-num1*M1_1
M_2=M_2-num1*M1_2
M_3=M_3-num1*M1_3
#算出制造当前循环中M1数量后,剩余的库存.
num2=min(M_1//M2_1,M_2//M2_2,M_3//M2_3)#获取能制造M2最大数量
if num2<=0:
num=M_1+M_2+M_3
if num<M :#比较更新方案
M1=num1
M2=num2
M=num
break
else:
M_1=M_1-num2*M2_1
M_2=M_2-num2*M2_2
M_3=M_3-num2*M2_3
num=M_1+M_2+M_3
#算出能生产最大M2后剩余库存
if num<M:#比较更新方案
M1=num1
M2=num2
M=num
M_1,M_2,M_3=m_1,m_2,m_3
print(M1,M2)
main()