#24209:


My2020Java (Java練習生)

學校 : 不指定學校
編號 : 135581
來源 : [27.51.88.103]
最後登入時間 :
2024-04-28 21:37:16
c022. 10783 - Odd Sum -- UVa10783 | From: [27.242.156.172] | 發表日期 : 2021-01-27 21:32

雖然這題很簡單,一堆人貼程式碼,但是都是累加

這裡提供一個公式解

首先,題目說要求一個區間內的奇數和 S

我們可以把這個和拆成 1 ~ b 之間的奇數和 Sb 減去 1 ~ a 的奇數和 Sa

也就是 S = Sb - Sa

然後因為只要求奇數,所以

若 b 是偶數,將 b 減一

若 a 是偶數,將 a 加一

a、b 是奇數就直接帶後面公式

利用等差數列之和公式,求 1 ~ a 之間的奇數和

Sa = ( 上底1 + 下底a ) * ( 高 (1+a)/2 ) / 2 

但是這樣總和會少算一個 a ,於是修正上述公式

改成 Sa 為 1 ~ (a -2) 間的奇數和

Sa = ( 上底 1 + 下底 ( a-2 ) ) * ( 高 (1+(a-2))/2 ) / 2

化簡得 Sa = ( a - 1 ) * ( a - 1 ) / 4

同理 Sb = ( 上底1 + 下底 b ) * ( 高 (1+b)/2 ) /2

化簡得 Sb = ( b + 1 ) * ( b + 1 ) / 4

所以答案 S =  ( b + 1 ) * ( b + 1 ) / 4 - ( a - 1 ) * ( a - 1 ) / 4

以上是不使用 迴圈 的公式解

 
ZeroJudge Forum