题目描述
给出一个正整数N和长度L,找出一段长度大于等于L的连续非负整数,他们的和恰好为N。答案可能有多个,我我们需要找出长度最小的那个。
例如 N = 18 L = 2:
5 + 6 + 7 = 18
3 + 4 + 5 + 6 = 18
都是满足要求的,但是我们输出更短的 5 6 7
解题思路:这题就是通过差值为1的等差数列求解,通过等差数列基本公式的推导可以得到等差数列首项a1 = (2N - (L-1)L) / (2 * N),而L的值是不能大于100的,所以可以直接求解L——100间有没有整数a1解,有的话直接输出就好了,超过100,直接输出No,注意输出的行末不能带有空格,下面是通过的Python代码
import math N, L = map(int, input().split()) i = L while i <= 100: a = (2 * N - i*(i - 1)) / (2 * i) if math.ceil(a) == a: for j in range(i- 1): print(int(a), end=" ") a += 1 print(int(a)) break i += 1 if i == 101: print("No")