//第一個:
while(count
{
for(i=n-count,t=1;i>=1;i--) t*=i; //每次迴圈要初始化.你少了t=1這一項.
count++;
s+=t;
}
//第二個:
思路完全錯誤,沒有改的必要.
//第三個:
同第二個.
我不是亂說的.你看我的分析.
你的第一個程式(改後)while迴圈的前幾步,我分解出來,你看就知道了.
第一次:t=20!
s=0+t=20!
第二次:t=19!
s=20!+19!
第三次:t=18!
s=20!+19!+18!
……
我再分析一下答案:(這個是最優的,要學這種思想)
第一次:t=1
s=0+1=1
第二次:t=1*2=2!
s=1+2!
第三次:t=2!*3=3!
s=1+2!+3!
第四次:t=3!*4=4!
s=1+2!+3!+4!
你的第二個程式:(我就不厭其煩,幫你解幾步吧)
第一次:t=20
s=0+20
i--;//i=19
i=n-count;//i=20
第二次:t=20*20
s=20+20*20
i--;i=n-count;//i=19
第三次:t=20*20*19
s=20+20*20+20*20*19
i=18
第四次:t=20*20*19*18
再分析下去我會瘋,上面這種方法叫做變數跟蹤法,是看看變數在前幾個迴圈有沒有按照期望的方式去變化。然後預測以後的步驟。
//第一個:
while(count
{
for(i=n-count,t=1;i>=1;i--) t*=i; //每次迴圈要初始化.你少了t=1這一項.
count++;
s+=t;
}
//第二個:
思路完全錯誤,沒有改的必要.
//第三個:
同第二個.
我不是亂說的.你看我的分析.
你的第一個程式(改後)while迴圈的前幾步,我分解出來,你看就知道了.
第一次:t=20!
s=0+t=20!
第二次:t=19!
s=20!+19!
第三次:t=18!
s=20!+19!+18!
……
我再分析一下答案:(這個是最優的,要學這種思想)
第一次:t=1
s=0+1=1
第二次:t=1*2=2!
s=1+2!
第三次:t=2!*3=3!
s=1+2!+3!
第四次:t=3!*4=4!
s=1+2!+3!+4!
……
你的第二個程式:(我就不厭其煩,幫你解幾步吧)
第一次:t=20
s=0+20
i--;//i=19
i=n-count;//i=20
第二次:t=20*20
s=20+20*20
i--;i=n-count;//i=19
第三次:t=20*20*19
s=20+20*20+20*20*19
i=18
第四次:t=20*20*19*18
……
再分析下去我會瘋,上面這種方法叫做變數跟蹤法,是看看變數在前幾個迴圈有沒有按照期望的方式去變化。然後預測以後的步驟。