問題:假設有一個數組x[],有n個元素,並且每一個都大於零;稱x[0]+x[1]+x[2]+...+x[i]爲前置和,而x[j]+x[j+1]+...+x[n-1]爲後置和。試編寫一個程序,求出x[]中有多少組前置和後置和。
思路:設置兩個索引變臉indexHead和indexTail,一個從前往後掃描,一個從後往前掃描。並且使用兩個變量記錄當前的前置和和後置和,並通過比較他們的值來決定移動哪個索引變量。直接看代碼吧。
#include <stdio.h>
int countHeadTailNum(const int a[], int n) {
int indexHead = 0,indexTail = n -1;
int sumHead = 0,sumTail = 0;
int nums = 0;
while(indexHead <= n - 1 && indexTail >= 0) {
if(sumHead > sumTail) {
sumTail += a[indexTail--];
}
else if(sumHead < sumTail) {
sumHead += a[indexHead++];
}
else {
nums++;
sumHead += a[indexHead++];
sumTail += a[indexTail--];
}
}
return nums;
}
int main() {
int a[] = {3,6,2,1,4,5,2};
printf("The number of equal prefix sum and sufix sum is %d\n",countHeadTailNum(a,7));
return 0;
}