#include <iostream>
using namespace std;
int subarraysum(int arr[],int n,int sum){
int cur_sum=0,start=0;
for(int i=0;i<n;i++){
cur_sum=cur_sum+arr[i];
while(start<i && cur_sum>sum){
cur_sum=cur_sum-arr[start];
start++;
}
if(cur_sum==sum)
{
cout<<start<<" "<<i;
return 1;
}
}
cout<<"-1";
//return 0;
}
int main() {
int t;
cin>>t;
for(int l=0;l<t;t++){
int n,s;
cin>>n>>s;
int arr[n]={0};
for(int i=0;i<n;i++)
{cin>>arr[i];
}
subarraysum(arr, n, s);
}
return 0;
}
这道题是一个简单的输入输出题,但它打印了我的答案和无限次的-1,我无法找出这段代码的问题和它的运行时间错误问题。
我认为这里的问题确实很棘手。你声明了一个函数 int subarraysum(int arr[],int n,int sum)
. 这里的问题是返回语句。你的函数 必须 返回一个值,但你的代码没有,在这种形式下。这将导致未定义的行为。在 int main()
-函数,是C++中唯一一个在C++中具有 non-void
-返回值,是允许不返回任何东西的。
根据你的编译器的优化水平,这种未定义的行为可能会导致无休止的循环,即使是在 for
-在缝隙前循环退出。试着取消注释 return 0;
在函数结尾处,这应该可以完成任务。
顺便说一下,调试你的代码对你没有帮助,因为在调试模式下的行为是不同的。在调试模式下,一切都可能是正常的。编译你的代码时,把所有的警告都放在 -Wall -Wextra -pedantic
. 编译器会告诉你可能有问题。像对待错误一样对待警告。