python笔记-用python解决小学生数学题【转载】
本篇转自博客:上海-悠悠
原文地址:http://www.cnblogs.com/yoyoketang/tag/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])
最新文章
- Docker知识-1
- Jmeter默认报告优化
- cocos2d-x 3.0rc2中读取sqlite文件
- cobbler
- Java实验报告五:Java网络编程及安全
- [转]iis7.5+win2008 出现 HTTP Error 503. The service is unavailable.
- php 采集类snoopy http://www.jb51.net/article/27568.htm | cURL、file_get_contents、snoopy.class.php 优缺点
- tcp/udp socket编程异同
- Android 共享文件的 Runtime 权限
- eclipse - 自动换行
- Microsoft Office 2007 Professional Plus+ 正版密钥
- ASP.NET - 使用MqSql数据库
- IE6 下 输入类型表单控件背景问题
- 201521123022 《Java程序设计》 第十一周学习总结
- 关于linux下的date日期,并以日期给文件命名
- JavaScript命名整理
- Ansible 脚本运行一次后,再次运行时出现报错情况,原因:ansible script 的格式不对,应改成Unix编码
- 关于vmvawe的光驱,iso镜像,挂载,卸载
- delphi新手到高手的工具--castalia
- 利用 Azure Devops 创建和发布 Nuget 包