定義x[0]+x[1]...+x[i]為前段和(所以前段和有n種),
x[j]+x[j+1]...+x[n-1]為後段和(所以後段和也有n種)。
請寫一個程式,求出x[]中有多少組相同的前段和和後段和。
解:
其實也跟前面的題目大同小異。
讓兩個index分別從前後段開始,若前段和比後段和大,
則後段再多取一個值,反之亦然。
遇到相等的時候增加count,最後回傳即達到要求。
為了程式方便起見,一開始的起點是prefix=0,suffix=n-1,
按照程式跑法,第一次就會增加count,
但由於最後一次會剛好先跳出迴圈,所以一來一往恰巧互補了。
Code大概長這樣:
int headtail(int f[], int n) { int pre = 0, suf = n-1, presum = 0, sufsum = 0, count = 0; while( pre < n && suf >= 0) if(presum > sufsum) sufsum += f[suf--]; else if(sufsum > presum) presum += f[pre++]; else { count++; sufsum += f[suf--]; presum += f[pre++]; } return count; }
沒有留言:
張貼留言