【每日一题0809】寻找平方数

:woman_mage:给定一个奇数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)}"

找规律即可

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)



image

参考题解

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,也就是说,题目转化成获取和值等于奇数n2个相邻数。将(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,也就是说,题目转化成获取和值等于奇数n2个相邻数。将(n+1)的结果进行位运算的右移操作>> 1就得到相邻数中较大的数字,它减去1则是相邻数中较小的那个数。由于题目要求以“大-小”的格式返回,考虑引用变量所以这里先算较大的数再求较小的数。

@yoyoyang1004_9968 首帖哟,热烈欢迎新同学~~~你的题解的思路和方式都是完全正确的,优秀!有个地方需要改进一下,就是返回的结果跟题目的要求稍微有点偏差,例如find_squares(9) 预期返回"25-16",你的函数实际返回"16-25"
@lifq1984 @fwj @2913295613_6056 @sunyanfen 题解验证通过,优秀!

@524080738_8698 @1733808462_7792 同学的题解正确!答题的代码记得使用markdown格式的代码块语法哈,也就是在代码开始前加python,在代码块后加,这样包起来的代码块格式输出稳定,比较方便大家的交流学习。