找到最近的有限制的平方数
finding nearest square number with a limit
嘿,所以我想编写代码来查找小于或等于某个数字 (x) 的最近平方数。我尝试了以下方法:
m = 0
base = 0
while m <= x:
if m > x:
break
m = base**2
base += 1
print(m)
然而,这给出了数字 x 之后最近的正方形,尽管打断了,因为 m > x 已经分配给了 m。我如何在 m > x 之前停止循环?
if m > x
是多余的。仅当 m <= x
为真时才会进入循环体,如果为真,则 m > x
永远不会,因此 break
永远不会 运行.
为了回答你的问题,在不了解更多数学知识的情况下,我只介绍第二个变量 prev_m
,然后使用它:
m = 0
prev_m = m
base = 0
while m <= x:
prev_m = m
m = base**2
base += 1
print(prev_m) # Then use prev_m instead
使用 math
模块有一种更简单的方法:
import math
y = math.sqrt(x) #find the square root of x
if y.is_integer() == False: #check y is not a whole number
print(math.pow(int(y),2)) # find the square root of the nearest whole number to y
大多数答案都是基于计算一平方太多然后使用前一个。
但是有没有可能知道下一个方块是否会太大,不用计算?
m = 0
base = -1
while base*2 + m < x:
base += 1
m = base**2
print(m)
免责声明:只是一个有趣的答案来思考为什么这有效。
嘿,所以我想编写代码来查找小于或等于某个数字 (x) 的最近平方数。我尝试了以下方法:
m = 0
base = 0
while m <= x:
if m > x:
break
m = base**2
base += 1
print(m)
然而,这给出了数字 x 之后最近的正方形,尽管打断了,因为 m > x 已经分配给了 m。我如何在 m > x 之前停止循环?
if m > x
是多余的。仅当 m <= x
为真时才会进入循环体,如果为真,则 m > x
永远不会,因此 break
永远不会 运行.
为了回答你的问题,在不了解更多数学知识的情况下,我只介绍第二个变量 prev_m
,然后使用它:
m = 0
prev_m = m
base = 0
while m <= x:
prev_m = m
m = base**2
base += 1
print(prev_m) # Then use prev_m instead
使用 math
模块有一种更简单的方法:
import math
y = math.sqrt(x) #find the square root of x
if y.is_integer() == False: #check y is not a whole number
print(math.pow(int(y),2)) # find the square root of the nearest whole number to y
大多数答案都是基于计算一平方太多然后使用前一个。
但是有没有可能知道下一个方块是否会太大,不用计算?
m = 0
base = -1
while base*2 + m < x:
base += 1
m = base**2
print(m)
免责声明:只是一个有趣的答案来思考为什么这有效。