python 100例之例三
来源:互联网 发布:天音网络发展有限公司 编辑:程序博客网 时间:2024/06/11 22:52
题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
解题思路:此题表面信息量少之又少,看上去很不好解。并且只是说一个整数,并没有给边界,所以自定义边界值为1000,设该数字为x.继续阅题,貌似突破口只有完全平方数,回忆数学中完全平方数的特性,看起来也没有什么明显的突破口。再思考,既然是完全平方数,那么是否可以判断sqrt()后的结果为int类型呢?查阅python官方文档,sqrt()结果都是float类型,如果将float类型转换成int类型,又无法判断该数字是否是完全平方数。再想方法,将sqrt()的结果转换为列表,如果最后一个元素是0,则证明这个结果就是整数,这样就间接证明了x+100和x+100+168的数一定是完全平方数。但是如何将一个float类型的数字转换为列表呢?可以先将float类型转换为str类型,使用str的split方法将str转换为列表。
代码如下:
import mathfor x in range(0,1000): a = math.sqrt(x+100) b = math.sqrt(x+100+168) a = str(a).split('.') b = str(b).split('.') if a[len(a)-1] == '0'and b[len(b)-1]=='0': print x
在网上查找解题方法,还看到一种简单的方法,先贴出来以作学习:
import mathfor i in range(10000): x = int(math.sqrt(i + 100)) y = int(math.sqrt(i + 268)) if(x * x == i + 100) and (y * y == i + 268): print i
该方法使用了一个恒等的概念,先将数字i+100和i+100+168开方得出x和y,再使用x和y分别平方等于i+100和i+100+168.这种方法比我自己的方法更简单。
在网上看到一串代码,使用math.abs方法,求绝对值判断该数字是否是整数,给我另一种解题思路。
import mathdef is_sqr(x): a = math.sqrt(x+100) b = math.sqrt(x+100+168) if abs(a-round(a)) < 0.00000001 and abs(b-round(b)) < 0.00000001: return xprint filter(is_sqr,range(1,1000))
filter是python的一个内建函数,用于过滤序列,具体可参考如下网址:
https://docs.python.org/2.7/search.html?q=filter
https://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/001418612030427b1f1cf4ea04c41368e8a6753dca43070000
在网上也看到有人用is_integer来判断一个float是否是整数,但是也有人说这个判断并不是太准确,所以不推荐使用该方法判断,不过也贴出使用is_integer 的代码。
import mathdef is_sqr(x): return math.sqrt(x+100).is_integer() and math.sqrt(x+100+168).is_integer()print filter(is_sqr, range(1, 1000)
同时,在最后贴出给了我思路使用abs方法的源代码:
import math def isPP(n): m=2 res=[] while m<=round(math.sqrt(n)): mid=math.log(n,m) if abs(mid-round(mid))<0.000000001: res.append(m) res.append(int(round(mid))) break m+=1 if len(res)==0:return None return res
- python 100例之例三
- Python之旅 三
- python学习之三
- 三.Python之循环
- python之模块三
- Python小试牛刀之三
- python学习之三
- python基础之三
- Python之redis(三)
- Python之process(三)
- [翻译] python Tutorial 之三
- Python学习总结之三
- 【python学习】之三、模块
- python学习笔记之三
- python学习之三 模块
- python学习之基础知识(三)
- Python之旅(三)
- Python三大器之生成器
- 存储选项
- 入门训练 Fibonacci数列
- HQL
- 配置jdk和mvn环境
- httpservletrequest的获取真实的ip
- python 100例之例三
- JAVA作业题
- poj1780(模拟+回溯)
- Android系统启动过程
- TCP/IP协议族【第15章 传输控制协议(TCP)】
- 在C#源码中使用WebSocket服务发送消息
- C#程序默认管理员启动
- VC++直接操作使用C#类库基本操作
- plsql developer如何查询SQL语句执行历史记录(转)