求解连续数列
描述
已知连续正整数数列{K}=K1,K2,K3…Ki的各个数相加之和为S,i=N (0<S<100000, 0<N<100000), 求此数列K。
输⼊描述
输⼊包含两个参数,1)连续正整数数列和S,2)数列⾥数的个数N。
输出描述
如果有解输出数列K,如果⽆解输出-1
示例1:
输⼊
525 6
输出:
85 86 87 88 89 90
示例2:
输入
3 5
输出
-1
法一
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
int sum = sc.nextInt();
int n = sc.nextInt();
//an = a1 + (n -1) *d
//Sn = (a1 + an) *n /2 此处d = 1
//Sn = a1 * n + n * (n -1)/2
//a1 = (Sn*2/n -n+1))/2
int a = 0;
if (sum * 2 % n != 0) {
System.out.println(-1);
return;
}
if ((sum * 2 / n - n) % 2 == 0) {
System.out.println(-1);
return;
} else {
a = (sum * 2 / n - n + 1) / 2;
for (int i = 0 ; i < n ; i++) {
System.out.print(a + i);
System.out.print(" ");
}
}
}
}
}
算法实现
等差数列{an}的通项公式为:
an=a1+(n-1)d。
前n项和公式为:
Sn=n*a1+n(n-1)d/2或Sn=n(a1+an)/2 。