假设有一个数组x[],它有n个元素,每一个元素都大于零,称x[0]+x[1]+…..+x[i]为前置和,而x[j]+x[j+1]+x[n-1]为后置和,试编写一个程序,求出x[]中有多少相同的前置和与后置和。
int get_head_tail_sum(int *p, int n)
{
int i = 0;
int j = 0;
int count = 0;
int head_sum = p[0];
int tail_sum = p[n-1];
/* 检查入参数组中的每一个元素均不小于0 */
while (i<n&&j<n)
{
if (head_sum == tail_sum)
{
++i;
++j;
++count;
head_sum += p[i];
tail_sum += p[n - j - 1];
}
else if (head_sum > tail_sum)
{
++j;
tail_sum += p[n - j - 1];
}
else
{
++i;
head_sum += p[i];
}
}
return count;
}