python 生产方案择优处理(蓝桥杯)

题目要求:

某冶金工厂生产两类合金产品,分别为M1和M2。生产M1和M2时需要三种原材料
(含某种原材料的需求量为0的情形)。现有一批这样的原材料即将过期,
希望尽快用这些原材料生产M1和M2(每种原材料的数量均小于10000),请
给出浪费原材料总量最少(即三种剩余原材料的数量和最小)的生产方案。
如果方案不止一种,请输出M1生产量最少时所对应的方案。

输入说明:第一行给出生产M1所需的三种原材料数量,为整型数据;
第二行给出生产M2所需的三种原材料数量,为整型数据;
第三行给出三种原材料的库存数,为整型数据。
输出说明:输出满足条件时,M1、M2各自的生产数量(整数解)。
输入样例:
4 2 2
6 3 2
20 10 10
输出样例:2 2

代码图

代码图1
代码图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()
运行效果图

运行效果图

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值