計算 S = 1 + (1+2) + (1+2+3) + ... + (1+2+...+N)。第 i 項為三角數 T(i) = i(i+1)/2,總和 S = Σ T(i) = N(N+1)(N+2)/6。
採用函數 SUM(int num) 計算單項三角數,主程式迴圈累加。輸入第一行為測資筆數 T,後續每行一個 N。
#include <stdio.h>
int SUM(int num);
int main() {
int i, n, num, sum;
scanf("%d", &n);
while (n--) {
scanf("%d", &num);
sum = 0;
for (i = 1; i <= num; i++) sum += SUM(i);
printf("%d", sum);
if (n > 0) printf("\n");
}
return 0;
}
int SUM(int num) {
int i, sum = 0;
for (i = 1; i <= num; i++) sum += i;
return sum;
}
直接套用公式 num*(num+1)*(num+2)/6 可將時間複雜度從 O(N²) 降至 O(1)。注意 N ≤ 200,結果最大 1353400,int 足夠。
Sample Input: 2 1 200 Sample Output: 1 1353400