一、我自己使用的解法,例外處理使用者輸入(1, 3)等狀況。
#include <iostream>
#include <vector>
using namespace std;
int main()
{
int n, m;
while(cin>>n>>m)
{
vector<<nt> foods(n), prefix(n);
for(int i = 0; i < n; i++) cin>>foods[i];
//prefix sums caculation => a[n] = sum(1~n)
prefix[0] = foods[0];
for(int i = 1; i < n; i++) prefix[i] = prefix[i-1] + foods[i];
//sum of certain range
for(int i = 0; i < m; i++)
{
int start, end;
cin>>start>>end;
if(start < 2)cout<<prefix[end-1]<<endl;
else cout<<prefix[end-1] - prefix[start -2]<<endl;
}
}
return 0;
}
二、參考guoivnn@gmail.com ( ID : 236523 )的解法,他的方式是直接讓陣列的第一項是零,就不用做輸入轉換成陣列項目。
#include <iostream>
#include <vector>
using namespace std;
int main()
{
int n, m;
while(cin>>n>>m)
{
vector<int> foods(n); //foods = {0,0,0,...,0}
for(int i = 1; i <= n; i++)
{
cin>>foods[i];
foods[i] += foods[i-1];
}
for(int i = 0; i < m; i++)
{
int start, end;
cin>>start>>end;
cout<<foods[end] - foods[start - 1]<<endl;
}
}
return 0;