序列和
时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M 热度指数:72877
校招时部分企业笔试将禁止编程题跳出页面,为提前适应,练习时请使用在线自测,而非本地IDE。
题目描述
给出一个正整数N和长度L,找出一段长度大于等于L的连续非负整数,他们的和恰好为N。答案可能有多个,我我们需要找出长度最小的那个。
例如 N = 18 L = 2:
5 + 6 + 7 = 18
3 + 4 + 5 + 6 = 18
都是满足要求的,但是我们输出更短的 5 6 7
N,L = map(int,input().split(' '))
ans = ['No']
for i in range(L,min(101,N)):
a = (2*N - i**2+i)//(2*i) #精华
if a >= 0 and (2*N - i**2+i)%(2*i)==0:
arr = [a for a in range(a,a+i)]
if sum(arr) == N:
# print(arr)
ans = [str(n) for n in arr]
break
print(' '.join(ans))