有人可以幫助我確定語句在最內循環中執行的次數嗎?準確確定程序中的執行次數
for(int i = 1; i <= n; i++)
for(int j = 1; j <= n; j++)
for(int k = j; k <= n; k++)
//statement
我真的不知道如何處理這種形式的問題,我認爲這將是一個有益的鍛鍊,如果有人能夠勾勒出思維過程中的一個可能會通過解決這樣的問題。謝謝。
有人可以幫助我確定語句在最內循環中執行的次數嗎?準確確定程序中的執行次數
for(int i = 1; i <= n; i++)
for(int j = 1; j <= n; j++)
for(int k = j; k <= n; k++)
//statement
我真的不知道如何處理這種形式的問題,我認爲這將是一個有益的鍛鍊,如果有人能夠勾勒出思維過程中的一個可能會通過解決這樣的問題。謝謝。
所以,第一個循環(使用i
)迭代而i <= n
是真實的 - 這意味着如果n >= 1
,它會遍歷n
倍。 j
循環也是如此。到目前爲止,我們有n * n
迭代。
第三k
循環是有點棘手,因爲它開始於j
,所以第一次,它將運行從1
到n
,但下一次開始於2等,直到j == n
,它只能運行一次。平均來說,這是n/2
迭代。
因此,這使得總共迭代n * n * (n+1)/2
。
這幾乎是正確的,正確的答案是在我的答案,這是n-1 – 2013-02-26 00:30:19
@PeterWooster:不,它是(n + 1)... – 2013-02-26 00:31:55
@oli這是正確的,它應該是n + 1,但它不是n,我更新了我的答案。 – 2013-02-26 00:35:26
答案是N * N *(N + 1)/ 2
爲什麼就留給讀者做練習
http://en.wikipedia.org/wiki/Triangular_number – 2013-02-26 00:18:54
與啓動一個循環,然後兩個,然後三個。尋找一個模式 – YXD 2013-02-26 00:19:40
這是功課嗎? – 2013-02-26 00:20:34