问题:假设你有无限数量的邮票,面值分别为6角,7角,8角,请问你最大的不可支付邮资是多少元?【17角,1.7元】
解法一:排列组合筛选法,假设三种邮票均有50张,计算出所有组合数,去重排序,最后得出最大不在组合里的数。
a=6b=7c=8num=50ss=[]#排列组合
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 inss:if x not ins:
s.append(x)
s.sort()
t=[]
y=5
for y in range(c*num):if y not ins:
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