分析:序列和要求序列是连续的,也就是说它们之间相差1,符合等差数列性质,且要求是对这个序列求和,因此可以用等差数列的求和公式处理。
- 等差数列求和公式:
La1+L(L−1)/2
,其中
L
代表求和的项数,
a1 代表等差数列首项。 -
L
长度范围较小,可以由小到大对其进行枚举,如果找到一个可行的等差数列首项且
L 满足题设范围,则结束处理。
下面给出java代码:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while (in.hasNext()) {
int N = in.nextInt(), L = in.nextInt();
if (L > 100 || L < 2) { //L不满足条件,输出No,继续下次处理
System.out.println("No");
continue;
}
int i = L; //枚举L
for ( ; i <= 100; i++) {
int t = N - (i * (i - 1) >> 1);
if (t >= 0 && t % i == 0) { //存在满足条件的首项
int left = t / i;
for (int j = left; j < left + i; j++) {
if (j == left + i - 1)
System.out.println(j);
else
System.out.print(j + " ");
}
break;
}
}
if (i > 100)
System.out.println("No");
}
}
}