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

原文地址:https://www.cnblogs.com/cyanlee/p/12892308.html