C++实现前缀和算法(带推理过程)

C++实现前缀和算法(带推理过程)

一、定义

前缀和实际上就是数学上的前n项和,只不过将其应用与编程上可以实现获取某段区间的和的效果。

二、推理过程

将以下数据作为例子

其中a[]用于存储原始数据,sum[ ]用来存储前n项和数据。假定要求区间[0,2]的和,直接等于sum[2];要求区间[1,2]的和那么只需要用sum[2]-sum[0]即可,要求区间[2,4]的和那么只需要用sun[4] - sum[1]即可…那么最终可以得出结论,要求区间[L,R]的和,当L为0时,其区间的和为:sum[R],当L不为0时,其区间的和为sum[R]-sum[L-1]

三、代码编写

细节:在编写函数的时候可以采用简便的写法(通过三目运算符的方式):

#define get_sum(L,R) (L? sum1[R] - sum1[L-1]:sum1[R])
#include<iostream>
#include<algorithm>
using namespace std;
//书写简短函数
//不用定义类型加上三目运算符
//#define get_sum(L,R) (L? sum1[R] - sum1[L-1]:sum1[R])
const int n = 5;
int sum[n];
int get_sum(int l, int r)
{
	if (l > 0)
	{
		return sum[r] - sum[l - 1];
	}
	else
	{
		return sum[r];
	}
}
int main()
{
	//定义数据类型的数组
	int a[5] = { 1,3,5,7,9 };
	//将数据处理一下变为前缀和数组
	//首项
	sum[0] = a[0];
	//其他项
	for (int i = 1; i < n; i++)
	{
		sum[i] = sum[i - 1] + a[i];
	}
	cout<<"[0,2]:" << get_sum(0, 2) << endl;
	cout<<"[1,2]:" << get_sum(1, 2) << endl;
	cout<<"[2,4]:" << get_sum(2, 4) << endl;


}

四、结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值