目录
1.概念
针对已知的一个数组a[],前缀和即为a[0]到a[i]的和,i是随意数组范围内的下标。
s[5]即为前六项的和。。
注释,先前看过许多相关文章,其中s[6]是前六项的和原因是把s[0]当作0。
2.理解
言归正传,前缀和即为一串数字的前几项的和,其中s[0]=1,s[下标]为前(下标+1)项和。
3.代码
求s[i]代码。
#include <stdio.h>
main ()
{
int a[100006],s[100006];
int n,m,i;
scanf("%d%d",&n,&m);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(i=0;i<n;i++)
{
if(i==0)
s[i]=a[i];//i=0时,即s[0]=a[0],而不是等于0。
else
s[i]+=s[i-1]+a[i];
}
for(i=0;i<n;i++)
printf("%d ",s[i]);
}
若想求任意连续几项的和,s[末]-s[初]。例如,求第二项到第四项的和,s=s[3]-s[1]。
while(m--)
{
int l,r;
scanf("%d%d",&l,&r);
if(l==0)
printf("%d",s[r]);
else
printf("%d\n",s[r]-s[l-1]);
}
续接上一个代码。