python数字排列组合去重_python笔记1-用python解决小学生数学题

前几天有人在群里给小编出了个数学题:

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

小编掰着手指头和脚趾头算了下,答案是:1.7元

那么问题来了?为啥是1.7呢,于是小编用python解决了这个小学数学题。

一、排列组合

假设6、7、8角各有50张(50张够了),先计算出所有的可能组合

二、排序、去重

先对组合就行排序,从小到大的顺序,排队站好,这里用到sort()函数(要是你用冒泡排序,那你就out啦!)

sort函数只是对list序列排序,并没有返回值

排序完成后,接下来就是去掉重复的数据

三、取出不能生成的数字

不在上面组合里面的数字就是不能生成的数字了,于是我们可以先取出来。

取出来后的数据放到r队列里。

从r队列取最后一个数据,就是答案啦。

四、参考代码

# coding:utf-8

a = 6

b = 7

c = 8

t = 50     # 票的张数

s = []     # 排列组合全部放到这里

# 生成的组合

for i in range(t+1):

s1 = a*i

s.append(s1)

for j in range(t+1):

s2 = a*i+b*j

s.append(s2)

for k in range(t+1):

s3 = a*i + b*j + c*k

s.append(s3)

# 排序

s.sort()

# 去掉重复

news = []

for i in s:

if i not in news:

news.append(i)

print("组合生成的最大数%s"%news[-1])

# 提取不在列表列表中的数字

r = []

for i in range(6*t):

if i in news:

pass

else:

r.append(i)

print("组合不能生成的数字%s"%r)

print("不能生成的最大数字为%s"%r[-1])​

如果当年小学时候就能学会python,妈妈就不用担心我的学习了!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值