|
发表于 2020-1-11 00:38:39
|
显示全部楼层
本帖最后由 阴阳神万物主 于 2020-1-11 16:11 编辑
玄学求解:
- def solve(n:'int > 0')->int:
- def pa(n):
- def getn(a:int):
- mid = int(a**(1/2))
- for i in range(mid,0,-1):
- yield i**2
- for each in getn(n):
- if each <= n:
- #print('调试',each)
- return 1 + solve(n-each)
- return 0
- def pb(n):
- res = 0
- while n:
- if str(n**0.5)[-2:] == '.0':
- return res + 1
- else:
- n -= int(int(n/2)**0.5)**2
- res += 1
- #print('调试',n)
- return res
- return min(pa(n),pb(n))
- if __name__ == '__main__':
- print('示例1 输出:',solve(12))
- print('示例2 输出:',solve(13))
复制代码
但果然还是不对。
正经来解:
- def solve(n:'int > 0')->int:
- def pa(n):
- def getn(a:int):
- mid = int(a**(1/2))
- for i in range(mid,0,-1):
- yield i**2
- res = 0
- for each in getn(n):
- if each <= n:
- #print('调试1',each,n)
- get = 1+pa(n-each)
- if res:
- if get < res:
- res = get
- else:
- return res
- else:
- res = get
- return res
- return pa(n)
- if __name__ == '__main__':
-
- print('示例1 输出:',solve(12))
- print('示例2 输出:',solve(13))
-
复制代码
|
评分
-
查看全部评分
|