※ 引述《max1147 (浩介)》之銘言:
: 1. for(i=1;i<=n;i++)
: 2. for(j=1;j<=i;j++)
: 3. for(k=1;k=j;k++)
: 4. x++;
: 請問這程式各行執行幾次
不知你題目是否有打錯
第三行應該是k<=j ?
我先假設你打錯好了
這題其實應該有幾種不同解法
先說最直接的 就是硬算
題目可以轉成以下這樣:
n i j
Σ Σ Σ 1
i=1 j=1 k=1
n i
= Σ Σ j
i=1 j=1
n
= Σ (i+1)i/2
i=1
n
= Σ 0.5*i^2 + 0.5*i
i=1
n n
= 0.5 Σ i^2 + 0.5Σ i
i=1 i=1
= 0.5n(n+1)(2n+1)/6 + 0.5(n)(n+1)/2
= n(n+1)(n+2)/6
==================以上是第一種算法==================
再來也可以用另一個看法
其實原題意的i,j,k取法
可以令 x1 = i , x2 = j-i , x3 = k-j
原題就會變成求 x1+x2+x3=n 其中x1≧0 , x2≧0 , x3≧0 的整數解個數
n n+2 (n+2)(n+1)n
那解的個數就是H = C = ------------- = n(n+1)(n+2)/6
3 3 3!
==================以上是第二種算法==================
以上兩種算法提供你參考囉
第二種比較不好想
不過想出來就幾乎不用算了
尤其維度如果再高一點
第一種就會變的很難算
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.45.138.191
※ 編輯: jameschou 來自: 114.45.138.191 (10/10 20:47)