上题目:
我的答案:
// headtail.c
#include<stdio.h>
int headtail(int a[],int la);
int main()
{
int a[] = {3,6,2,1,4,5,2};
printf("The eq has %d pair(s)\n",headtail(a,sizeof(a) / sizeof(a[0])));
return 0;
}
int headtail(int a[],int la)
{
int i = 0;
int j = la - 1;
int sumh = a[i];
int sumt = a[j];
int count = 0;
while(i < la && j >= 0)
{
if(sumh < sumt)
{
i++;
sumh = sumh + a[i];
}
else if(sumh > sumt)
{
j--;
sumt = sumt + a[j];
}
else
{
count++;
i++;
j--;
sumh = sumh + a[i];
sumt = sumt + a[j];
}
}
return count;
}
标准答案:
int head_tail(int x[],int n)
{
int prefix = 0;
int suffix = 0;
int prefix_idx = 0;
int suffix_idx = 0;
int count = 0;
while(suffix_idx >= 0 && prefix_idx <= n - 1)
{
if(prefix < suffix)
prefix += x[prefix_idx++];
else if(prefix < suffix)
suffix += x[suffix_idx--];
else
{
count++;
prefix += x[prefix_idx++];
suffix += x[suffix_idx--];
}
}
return count;
}
差不多的答案,虽然我的程序看起来长。