区间和问题
题目描述
给定一个整数数组 Array,请计算该数组在每个指定区间内元素的总和。
输入描述
第一行输入为整数数组 Array 的长度 n,接下来 n 行,每行一个整数,表示数组的元素。随后的输入为需要计算总和的区间,直至文件结束。
输出描述
输出每个指定区间内元素的总和。
思路:如果采用暴力会超时,所以需要用到前缀和思想。前缀和即在输入数组的时候,就将每一个以数组下标0为起点,终点为当前输入下标,这区间的数进行加和,将其保存在数组p。所以计算某一个区间就可以将数组p中的sum相减,即为所求,例如求【2,3】,则用p[3]-p[1](ps:p[2]包含下标为2的数,所以应该是减1)
那么代码就很好写了
#include <iostream>
#include <vector>
using namespace std;
int main(){
int n,a,b;
cin>>n;
vector<int> vec(n);
vector<int> p(n);
int sum=0;
for(int i=0;i<n;i++){
scanf("%d",&vec[i]);
sum+=vec[i];
p[i]=sum;
}
while(scanf("%d%d",&a,&b)==2){
int result;
if(a==0){
result=p[b];
}
else{
result=p[b]-p[a-1];
}
printf("%d\n",result);
}
return 0;
}
总结:又重温了一遍语法,scanf和printf都有些生疏了,学习到了cin的用法,scanf直接输入了,无需再等于,dev c++中不新建项目会出现同名的bug (ps:这点在本地调试的时候要注意!
1576

被折叠的 条评论
为什么被折叠?



