給定一個數列:1, 2, 4, 7, 11, 16, 22……,請計算該數列前 n 項的和。輸入包含多組測試數據,每組一個整數 n (0 < n < 1000),輸出對應的前 n 項和。
觀察數列可以發現:
這是一個二階等差數列,通項公式可推導為:aₖ = 1 + k(k-1)/2
採用動態生成數列的方法:
#include <stdio.h>
int main() {
int i, num, sum;
int array[1001];
while (scanf("%d", &num) != EOF && (num > 0 && num < 1000)) {
sum = 0;
array[0] = 1;
for (i = 1; i < num; i++) {
array[i] = array[i-1] + i;
}
for (i = 0; i < num; i++) {
sum += array[i];
}
printf("%d\n", sum);
}
return 0;
}
時間複雜度:O(n) 每組測試數據
空間複雜度:O(n) 需要存儲數列陣列
輸入:
3 4
輸出:
7 14
驗證:n=3 時數列為 1,2,4 和為 7;n=4 時數列為 1,2,4,7 和為 14。