zoukankan      html  css  js  c++  java
  • python习题1-最大的不可支付邮资问题

    问题:假设你有无限数量的邮票,面值分别为6角,7角,8角,请问你最大的不可支付邮资是多少元?【17角,1.7元】

    解法一:排列组合筛选法,假设三种邮票均有50张,计算出所有组合数,去重排序,最后得出最大不在组合里的数。

    a=6
    b=7
    c=8
    num=50
    ss=[]
    # 排列组合
    for i in range(num+1):
        for j in range(num+1):
            for k in range(num+1):
                ss.append(a*i+b*j+c*k)
    
    s=[]
    # 去重排序
    for x in ss:
        if x not in s:
            s.append(x)
    s.sort()
    
    t=[]
    y=5
    for y in range(c*num):
        if y not in s:
            t.append(y)
    
    print("最大不可支付邮资:",t[-1],"角")

    解法二:思路:

    1、邮资:s=6*x+7*y+8*z=6(x+y+z)+(y+2*z),其中0=<(y+2*z)<=5

    2、(x+y+z)的和由0开始递增,当遇到第一个数是(x+y+z)的和,又能满足(y+2*z)覆盖0-5所有组合时,最大不可支付邮资

    详细思路:

    1、当(x+y+z)=0,x=y=z=0,(y+2*z)=0

    2、当(x+y+z)=1,

    ①y=z=0,x=1,(y+2*z)=0

    ②y=1,x=z=0,(y+2*z)=1

    3、当(x+y+z)=2

    ①y=z=0,x=2,(y+2*z)=0

    ②x=y=1,z=0,(y+2*z)=1

    ③x=z=1,y=0,(y+2*z)=2

    ④x=0,y=z=1,(y+2*z)=3

    4、当(x+y+z)=3

    ①y=z=0,x=3,(y+2*z)=0

    ②x=2,y=1,z=0,(y+2*z)=1

    ③x=2,z=1,y=0,(y+2*z)=2

    ④x=1,y=z=1,(y+2*z)=3

    ⑤x=0,y=2,z=1,(y+2*z)=4

    ⑥x=0,y=1,z=2,(y+2*z)=5

    5、当(x+y+z)=4

    ①y=z=0,x=4,(y+2*z)=0

    x=3,y=1,z=0,(y+2*z)=1

    x=3,z=1,y=0,(y+2*z)=2

    x=2,y=z=1,(y+2*z)=3

    x=1,y=2,z=1,(y+2*z)=4

    x=1,y=1,z=2,(y+2*z)=5

    .

    .

    .

    综上可得,当(x+y+z)=2,(y+2*z)=5,的时候,是最大不可支付邮资Smax=6*2+5=17

  • 相关阅读:
    编写屏幕保护程序
    C++调用JS函数
    connected standby
    用户层APC队列使用
    WebBrowser2控件使用
    UUID
    网络过滤驱动
    windows短路径转换成长路径
    解析快捷方式指向的文件
    获取进程占用的内存
  • 原文地址:https://www.cnblogs.com/cyanlee/p/12892308.html
Copyright © 2011-2022 走看看