#13612:


snakeneedy (蛇~Snake)

學校 : 國立高雄師範大學附屬高級中學
編號 : 7661
來源 : [114.40.8.251]
最後登入時間 :
2023-01-25 19:16:06
a044. 空間切割 -- 許介彥 | From: [218.164.125.30] | 發表日期 : 2018-03-29 13:03

概念:第 k 個面,會被前 (k - 1) 個面畫出 (k - 1) 條交叉線,交叉線將第 k 個面分割成 1+1+2+\cdots+(k-1)=1+{k(k-1)\over2} 個區塊,此區塊數即第 k 個面在空間上所增加的空間數

空間數總和為 1+\Sigma_{k=1}^{n}(1+{k(k-1)\over2})

1. 可以用迴圈去跑

sum = 1;
for (int k = 1; k <= n; ++k) {
sum += 1 + k * (k - 1) / 2;
}

2. 或者整理公式

1+\Sigma_{k=1}^{n}(1+{k(k-1)\over2})=1+\Sigma_{k=1}^{n}1+\Sigma_{k=1}^{n}{k(k-1)\over2}

=1+\Sigma_{k=1}^{n}1+{1\over2}(\Sigma_{k=1}^{n}k^2-\Sigma_{k=1}^{n}k)

=1+n+{1\over2}\left[{1\over6}n(n+1)(2n+1)-{1\over2}n(n+1)\right]

=1+n+{1\over2\times6}\left[n(n+1)(2n+1-3)\right]

=1+n+{1\over6}\left[n(n+1)(n-1)\right]

直接套用

cout << 1 + n + n * (n + 1) * (n - 1) / 6 << endl;

 

 
#18113: Re:淺見


rexwu1104@gmail.com (黑雪公主 Black Lotus)

學校 : 新北市私立南山高級中學
編號 : 93041
來源 : [49.216.131.103]
最後登入時間 :
2024-06-06 19:28:43
a044. 空間切割 -- 許介彥 | From: [114.24.4.158] | 發表日期 : 2019-06-17 16:10

概念:第 k 個面,會被前 (k - 1) 個面畫出 (k - 1) 條交叉線,交叉線將第 k 個面分割成 1+1+2+\cdots+(k-1)=1+{k(k-1)\over2} 個區塊,此區塊數即第 k 個面在空間上所增加的空間數

空間數總和為 1+\Sigma_{k=1}^{n}(1+{k(k-1)\over2})

1. 可以用迴圈去跑

sum = 1;
for (int k = 1; k <= n; ++k) {
sum += 1 + k * (k - 1) / 2;
}

2. 或者整理公式

1+\Sigma_{k=1}^{n}(1+{k(k-1)\over2})=1+\Sigma_{k=1}^{n}1+\Sigma_{k=1}^{n}{k(k-1)\over2}

=1+\Sigma_{k=1}^{n}1+{1\over2}(\Sigma_{k=1}^{n}k^2-\Sigma_{k=1}^{n}k)

=1+n+{1\over2}\left[{1\over6}n(n+1)(2n+1)-{1\over2}n(n+1)\right]

=1+n+{1\over2\times6}\left[n(n+1)(2n+1-3)\right]

=1+n+{1\over6}\left[n(n+1)(n-1)\right]

直接套用

cout << 1 + n + n * (n + 1) * (n - 1) / 6 << endl;

 

這樣會不會比較好

(a*a*a+5*a+6)/6
 
#22518: Re:淺見


snakeneedy (蛇~Snake)

學校 : 國立高雄師範大學附屬高級中學
編號 : 7661
來源 : [114.40.8.251]
最後登入時間 :
2023-01-25 19:16:06
a044. 空間切割 -- 許介彥 | From: [218.161.41.139] | 發表日期 : 2020-09-11 15:42

這樣會不會比較好

(a*a*a+5*a+6)/6

你的是簡化公式後的 :/+6 提到外面看起來更簡潔

(n*n*n + 5*n)/6 + 1
 
ZeroJudge Forum