--- tags: 解題報告,zj --- # a005. Eva 的回家作業 題目連結: [Zerojudge](https://zerojudge.tw/ShowProblem?problemid=a005) ## 題目說明 已知數列的前四項,填出第五項。數列只可能是等差或等比數列。 ## 想法 1. 迴圈接受輸入 2. 判斷是等差或等比 3. 計算第五與輸出 ## 參考答案 :::spoiler 點我查看 Runtime: 2ms Memory: 308KB 時間複雜度: $O(t)$ 空間複雜度: $O(1)$ ```cpp= #include <iostream> using namespace std; int main() { int t,a1,a2,a3,a4,d1,d2; cin>>t; for (int i = 0;i < t ;i++){ cin>> a1 >> a2 >> a3 >> a4; d1 = a2 - a1; d2 = a3 - a2; if (d1 == d2) cout<< a1 <<" "<< a2 << " "<< a3 << " "<< a4 << " "<< a4+d1 << endl; else{ d1 = a2/a1; cout<< a1 << " "<< a2 << " "<< a3 << " "<< a4 << " "<< a4*d1 << endl; } } return 0; } ``` [Github](https://github.com/henryleecode23/solve_record/tree/main/zerojudge/a005) ::: ## 解釋 ### 接收輸入 依據輸入說明 > 第一行是數列的數目t(0 <= t <= 20)。 因此使用迴圈來接收 $t$ 行的數列 ```cpp=6 cin>>t; for (int i = 0;i < t ;i++) ``` ### 判斷是等比或等差 先了解等比與等差是什麼 等比:數列中任何相鄰兩項的比例相等 $\qquad \frac{a_{n+1}}{a_n} = \frac{a_{n+2}}{a_{n+1}} =r$ 等差:數列中任何相鄰兩項的差相等 $\qquad a_n = a_{n-1}+d$ 因為題目保證輸入的數列不是等比就是等差所以只要判斷一種就好 這裡是計算前三項的差值判斷是否為等差 ```cpp=9 d1 = a2 - a1; d2 = a3 - a2; ``` ### 計算第五項與輸出 依據前面的計算做判斷是否是等差,再去計算第五項的值連前四項一起輸出 ```cpp=11 if (d1 == d2) cout<< a1 <<" "<< a2 << " "<< a3 << " "<< a4 << " "<< a4+d1 << endl; else{ d1 = a2/a1; cout<< a1 << " "<< a2 << " "<< a3 << " "<< a4 << " "<< a4*d1 << endl; } ``` ## 心得 這題不難只需要一些數學常識,很容易就能解出來 --- {%hackmd @hlc23/dark-theme %}
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up