给定一个奇数n,该数一定是连续两个完美平方数之间的差。请编写一个python函数,以“大-小”的格式返回字符串格式的结果。
示例:
输入:9
,输出:"25-16"
。
题目难度:简单
题目来源:codewars
def find_squares(n:int) -> str:
pass
assert find_squares(9) == "25-16"
assert find_squares(5) == "9-4"
assert find_squares(7) == "16-9"
def find_squares(n: int) -> str:
start = 4
end = 4 + n
while True:
if is_sqrt(start) and is_sqrt(end):
return f"{end}-{start}"
else:
start += 1
end += 1
def is_sqrt(i):
for j in range(1, i):
if i == j * j:
return j
else:
return 0
assert find_squares(9) == "25-16"
assert find_squares(5) == "9-4"
assert find_squares(7) == "16-9"
import math
def find_squares(n:int):
return f"{pow(int((n-1)/2),2)}-{pow(int((n-1)/2+1),2)}"
fwj
(fwj)
4
找规律即可
def find_squares(n:int):
n1=n//2
n2=n//2+1
s=[]
s.append(str(n2**2))
s.append(str(n1**2))
return '-'.join(s)
def find_squares(n: int) -> str:
m = int((n+1)/2)
s = f"{m**2}-{(m-1)**2}"
return s
def find_squares(n: int) → str:
return “{} - {}”.format((n//2+1)**2,(n//2)**2)
def find_squares(n) -> str:
""" 寻找平方根 """
for i in range(2,n):
if pow(int(i),2) - pow(int(i-1),2) == n:
return "{}-{}".format((i) ** 2, (i-1) ** 2)
参考题解
def find_squares(n:int) -> str:
small = (n-1) // 2
return f'{(small + 1) ** 2}-{small ** 2}'
assert find_squares(9) == "25-16"
assert find_squares(5) == "9-4"
assert find_squares(7) == "16-9"
解题思路:结合数学知识,将原题进行提炼,寻找规律:给定的n是奇数,9 = 25-16
,也就是 9 = 52 - 42,我们会发现一个规律,9 = 5 + 4
,也就是说,题目转化成获取和值等于奇数n
的2
个相邻数。将(n-1)
的结果用2
整除就得到相邻数中较小的数字,它加上1
则是相邻数中较大的那个数。
参考题解(代码洁癖)
def find_squares(n:int) -> str:
return f'{(big:= 1+n >> 1) ** 2}-{(big - 1) ** 2}'
assert find_squares(9) == "25-16"
assert find_squares(5) == "9-4"
assert find_squares(7) == "16-9"
解题思路:结合数学知识,将原题进行提炼,寻找规律:给定的n是奇数,9 = 25-16
,也就是 9 = 52 - 42,我们会发现一个规律,9 = 5 + 4
,也就是说,题目转化成获取和值等于奇数n
的2
个相邻数。将(n+1)
的结果进行位运算的右移操作>> 1
就得到相邻数中较大的数字,它减去1
则是相邻数中较小的那个数。由于题目要求以“大-小”的格式返回,考虑引用变量所以这里先算较大的数再求较小的数。
@yoyoyang1004_9968 首帖哟,热烈欢迎新同学~~~你的题解的思路和方式都是完全正确的,优秀!有个地方需要改进一下,就是返回的结果跟题目的要求稍微有点偏差,例如find_squares(9)
预期返回"25-16"
,你的函数实际返回"16-25"
。
@lifq1984 @fwj @2913295613_6056 @sunyanfen 题解验证通过,优秀!
@524080738_8698 @1733808462_7792 同学的题解正确!答题的代码记得使用markdown格式的代码块语法哈,也就是在代码开始前加python,在代码块后加
,这样包起来的代码块格式输出稳定,比较方便大家的交流学习。