下面向大家介绍几个python算法题。
一:二分法求平方根
1.题目要求为
2.输入输出格式为
3.博主解题的思路
这道题在c语言中是一道经典的题目,可以用循环,或者递归,在这里我们用python来写。无论是循环还是递归,都是下面的思路:
二分法就是从中间开始取,把我们每次的结果的变化值(这里是平方)和初始数值对比,然后分别从左右两边截取。
这里首先设定两个范围定界符low与high,而且有可能我们输入法的小于1,就需要语法max(n,1.0),然后得到每次的中间值mid,然后进行循环或者递归,条件是,我们最终的得到的平方根mid的平方和我们最初的数值n的相差范围在1e-6。
然后根据mid的平方和n对比,如果mid的平方小于n的话,说明n的平方根在原来中间值的右边,此时就要在中间值以及最大值的那个范围寻找,把下一次的初始值设为前一次的中间值,然后前一次的中间值取下一次的中间值;如果如果mid的平方大于n的话,刚好反过来,这样等到循环到mid的平方和我们最初的数值n的相差范围在1e-6时,就可以认为结果在合理范围内。
4.代码如下
(1)循环解题代码
from math import sqrt
def sqrt_binary(n):
low = 0
high = max(n,1.0)
mid = (high + low) / 2.0
while abs(mid ** 2 - n) > 1e-6:
if mid ** 2 < n:
low = mid
else:
high = mid
mid = (high + low) / 2.0
print(mid)
print(sqrt(n))
n = eval(input(""))
sqrt_binary(n)
(2)递归解题代码
from math import sqrt
def sqrt_binary(n,low,high,mid):
if abs(mid ** 2 - n) <= 1e-6:
print(mid)
print(sqrt(n))
else:
if mid ** 2 < n:
low = mid
mid = (high + low) / 2.0
sqrt_binary(n,low,high,mid)
else:
high = mid
mid = (high + low) / 2.0
sqrt_binary(n,low,high,mid)
n = eval(input(""))
low = 0
high = max(n,1.0)
mid = (high + low) / 2.0
sqrt_binary(n,low,high,mid)
二:Collatz猜想
1.题目要求为
2.输入输出格式为