问题:假设你有无限数量的邮票,面值分别为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