等值首尾和問題

問題:假設有一個數組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;
}


發佈了51 篇原創文章 · 獲贊 9 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章