分解完全平方数
提交数: 187, 通过率: 70.59%, 平均分: 82.57
题目描述:
一个正整数 n 分解为 m 个完全平方数的和。
当有多种方案时:
1)输出 m 最小时的分解方案。
2)若两种方案 m 相同,输出第一个数尽可能小的方案
3)若两种方案第一个数仍相同,输出第二个数尽可能小的方案,以此类推。
如:
1)12 可分解为 12个 12之和,4 个完全平方数之和 ( 12+ 12 + 12 + 32 ) 等,最少可分解为3个完全平方数之和 ( 22+ 22+ 22 ) ,则结果为 12 = 22+ 22+ 22。
2)69 可分解为 12 + 22 + 82 或 22 + 42 + 72 ,则结果为 69 = 12 + 22 + 82
输入格式:
一个整数n
输出格式:
第一行输出分解方案。
第二行输出分解的最少项数。
样例输入:
样例1: 12 样例2: 69
样例输出:
样例1: 12=2^2+2^2+2^2 3 样例2: 69=1^2+2^2+8^2 3
提示:
n = int(input( ))
path = [[-1, -1]] * (n + 1)
q = [0] * n
vis = [False] * (n + 1)
head = 0
q[0] = n
tail = 1
vis[n] = True
while head < tail and q[head] != int(q[head]**0.5) ** 2:
____________________
head += 1
i = 1
while i * i <= num:
tNum = num - i * i
if tNum > 0 and vis[tNum] == False:
q[tail] = tNum
tail += 1
path[tNum] = [num, i]
_________________________
i += 1
m = 1
p = q[head]
s = str(int(p**0.5))+"^2"
while path[p][0] != -1:
m += 1
s = str(path[p][1])+"^2" + '+' + s
p = path[p][0]
s = str(n) + "=" + s
print(s)
print( m )
时间限制: 1000ms空间限制: 256MB
来源: 2023.4温州三模