乎乎得到一整数序列A1,A2,...,An,求A1-An中的一个子序列Ap-Aq的和,共T组测试。
输入描述:
输入为T+3行,
第一行,为一个整数n,范围为(31000),表示输入序列的长度,1000),用空格隔开,
第二行,输入n个整数,每个整数的范围为(1
第三行,输入一个整数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
*/