Codebar 程式酒吧

一座輕鬆學習程式的酒吧

0%

a216. 數數愛明明

題目連結

https://zerojudge.tw/ShowProblem?problemid=a216

解題思路

這題最直觀的方式是使用迴圈求出f、g值,但有鑑於本題的測資較大,為了避免出現TLE的情況,建議直接找出f(n)、g(n)的關係式以節省運算時間。如果一時之間看不出f(n)、g(n)關係式的話,可以多寫幾項觀察他們的規律。我們會發現f(n)就是連續正整數和,公式為 (n*(n+1))/2;g(n)則可以用數學上的遞迴關係式求得,公式為n*(n+1)*(n+2)/6。

注意事項

本題測資較大,部分測資的g(n)會超過int型態變數所能儲存的最大數值,因此需使用long long型態變數,寫法是%lld。

程式碼:C語言

1
2
3
4
5
6
7
8
9
10
#include <stdio.h>
int main() {
//宣告並讀取變數n
long long n;
//使用EOF寫法判斷程式執行的條件
while(scanf("%lld", &n)!=EOF)
//輸出f(n)=n*(n+1)/2,輸出g(n)=n*(n+1)*(n+2)/6
printf("%lld %lld\n", n*(n+1)/2, n*(n+1)*(n+2)/6);
return 0;
}