# Greedy# Arithmetic Progression# Simulation

d881 - 作業苦多

🔗 前往 ZeroJudge 原題

題目描述

題目要求計算一個由 50 項組成的級數的和。這個級數的每一項的差形成一個等差數列,公差由輸入 d 決定,第一項為 1。 換句話說,需要計算 1 + (1+d) + (1+2d) + (1+3d) + ... + (1+49d) 的和。

解題思路

程式碼使用迴圈模擬了級數的計算過程。首先初始化 nm 為 1,d 為輸入的公差,k 為 0。然後,使用一個迴圈迭代 50 次,每次計算下一項的值,並將其加到 n 上。接著,將更新後的 n 加到 m 上。在迴圈結束後,輸出 m 的值。每次處理完一個輸入後,將 mndk 重置為初始值,以便處理下一個輸入。

複雜度分析

  • 時間複雜度: 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;
		
	}
	
	
}

Discussion