求子序列求和的问题。

乎乎得到一整数序列A1,A2,...,An,求A1-An中的一个子序列Ap-Aq的和,共T组测试。
输入描述:
输入为T+3行,
第一行,为一个整数n,范围为(31000),表示输入序列的长度,
第二行,输入n个整数,每个整数的范围为(1
1000),用空格隔开,
第三行,输入一个整数T,表示T组测试数据。
接下来T行,每行两个整数p和q(1 ≤ p≤ q≤10000),用空格隔开,第一个整数表示子序列的开始,第二个整数表示子序列的结束。
输出描述:
共T行,针对每组输入的子序列的开始和子序列的结束,输出子序列的和并换行,如果 n < p ≤ q,则输出0,如果 p ≤ n ≤ q,则输出p和q覆盖的子序列和。
#include
#include
#include
using namespace std;
int main()
{
int n;
cin>>n;
int a[n];
for(int i=0;i
{
cin>>a[i];
}
int t,p,q;
int sum=0;
cin>>t;
for(int i=0;i
{
cin>>p>>q;
if(q<=n)
{
for(int i=p;i
{
sum+=i;
}
cout<
}
else if(q>n&&p<=n)
{
for(int i=p;i
{
sum+=i;
}
cout<
}
else if(p>n)
{
cout<<0<
}
}

return 0;

}
错哪了啊

回答:错误的点有很多呀,大哥,首先就是这格式的问题,咱就是能不能放在代码块里面,方便阅读不是
具体的问题在,对sum 需要每次计算区间总和都需要初始化,另外对于数组的下标和p、q的关系,需要从题目中搞清楚,这里我也没有细究了,最后的计算p, n区间的总和,注意下标啊,要包括的地方要计算在内的;最后,希望下次能够附带一下测试用例及预期结果,咱尽量专业一点

#include <iostream>
using namespace std;

int main()
{
    int n;
    cin >> n;
    int a[n];
    for (int i = 0; i < n; i++)
    {
        cin >> a[i];
    }
    
    int t, p, q;
    int sum = 0;
    cin >> t;
    
    for (int i = 0; i < n; i++)
    {
        sum = 0;
        cin >> p >> q;
        if (q <= n)
        {
            for (int i = p; i < q; i++)
            {
                sum += a[i];
            }
            cout << sum << endl;
        }
        else if (q > n && p <= n)
        {
            for (int i = p; i < n; i++)
            {
                sum += a[i];
            }
            cout << sum << endl;
        }
        else if (p > n)
        {
            cout << 0 << endl;
        }
    }

    return 0;
}

/*
测试数据
测试一:正常算 p, q 
9
1 2 3 4 5 6 7 8 9
1
3 6

测试二:算 p, n 
9
1 2 3 4 5 6 7 8 9
1
7 12
*/