d881 - 作業苦多
題目描述
題目要求計算一個由 50 項組成的級數的和。這個級數的每一項的差形成一個等差數列,公差由輸入 d 決定,第一項為 1。 換句話說,需要計算 1 + (1+d) + (1+2d) + (1+3d) + ... + (1+49d) 的和。
解題思路
程式碼使用迴圈模擬了級數的計算過程。首先初始化 n 和 m 為 1,d 為輸入的公差,k 為 0。然後,使用一個迴圈迭代 50 次,每次計算下一項的值,並將其加到 n 上。接著,將更新後的 n 加到 m 上。在迴圈結束後,輸出 m 的值。每次處理完一個輸入後,將 m、n、d 和 k 重置為初始值,以便處理下一個輸入。
複雜度分析
- 時間複雜度: O(50) (迴圈迭代 50 次,可以視為 O(1))
- 空間複雜度: O(1) (只使用了幾個常數大小的變數)
程式碼
#include <iostream>
using namespace std;
int main (){
long long int n=1,m=1;
int d,k=0;
while(cin >> d){//1+2+5+10+17+26+37...
k=d;//2
for(int i=2;i<=50;i++){
d+=k;//2
if(i==2){
d=1;
}
n+=d;//2
m+=n;
}
cout << m << endl;
m=1;
n=1;
d=0;
k=0;
}
}