python基础练习题(一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?)
2021/5/15 22:27:36
本文主要是介绍python基础练习题(一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
day2
---------------------------------------------------------------
实例003:完全平方数
题目: 一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
仿佛不会思考,直接上手写。。。
1 k = 10001 2 for i in range(0,k): 3 for j in range(0,k): 4 if j*j ==(i+100): 5 for k in range(0,k): 6 if k*k ==(i+268): 7 print(i) 8 continue
嗯,假装找到几个值,但这代码看得自己想吐,效率真TM慢,真low
标准答案
思路是:最坏的结果是n的平方与(n+1)的平方刚好差168,由于是平方的关系,不可能存在比这更大的间隙。至于判断是否是完全平方数,最简单的方法是:平方根的值小数为0即可。
结合起来:
1 n=0 2 while (n+1)**2-n*n<=168: 3 n+=1 4 5 for i in range((n+1)**2): 6 if i**0.5==int(i**0.5) and (i+168)**0.5==int((i+168)**0.5): 7 print(i-100)
对比下,这里应该找到数的最大值,而我少了这一步,数学改补补了。对了求一个平方根可以用 x**0.5 == int (x**0.5) ,脑子锈了。。。下面是个更烧脑的答案。。。
其他答案
分析:整数+100是一个完全平方数即大于0的数,所以这个数应该是大于-99,否则不会是完全平均数。
x+100 =n*n
x+100+168=m*m
2x+268=n*n+m*m
2x=n*n+m*m-268
x=(n*n+m*m-268)*0.5
m*m-n*n=168,根据这条推断,100*100-99*99=10000-9801=199>168,所以m和n的值都小于100,那么x的值就小于10000,所以
1 import math 2 3 4 #方法一 5 for i in range(-99,10000): 6 x = int(math.sqrt(i+100)) 7 if x*x == i+100: 8 y = int(math.sqrt(i+100+168)) 9 if y*y==i+100+168: 10 print(i) 11 12 13 #方法二,再次优化,以m,n来写代码,n<100,又因为m*m=n*n+168,所以m>math.sqrt(168),即m>13,这个方法循环次数更少 14 for m in range(13,100): 15 n = int(math.sqrt(m*m-168)) 16 if n*n ==m*m-168: 17 print(m*m-168-100)
这篇关于python基础练习题(一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-20Python编程入门指南
- 2024-12-20Python编程基础与进阶
- 2024-12-19Python基础编程教程
- 2024-12-19python 文件的后缀名是什么 怎么运行一个python文件?-icode9专业技术文章分享
- 2024-12-19使用python 把docx转为pdf文件有哪些方法?-icode9专业技术文章分享
- 2024-12-19python怎么更换换pip的源镜像?-icode9专业技术文章分享
- 2024-12-19Python资料:新手入门的全面指南
- 2024-12-19Python股票自动化交易实战入门教程
- 2024-12-19Python股票自动化交易入门教程
- 2024-12-18Python量化入门教程:轻松掌握量化交易基础知识