#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)
。 这里的问题是return语句。 您的函数必须返回一个值,但您的代码不能,以这种形式。 这会导致未定义的行为。 C++中的int main()
-函数是C++中唯一一个具有non-void
-返回值的函数,该值不允许返回任何内容。
根据编译器的优化级别,这种未定义的行为可能会导致无止境的循环,即使seams to exit之前的for
-loop也是如此。 尝试在函数末尾取消对return0;
的注释,这样应该可以完成任务。
顺便说一句。 在这里调试您的代码不会帮到您,因为在debug-mode中行为是不同的。 在那里一切都会好起来的。 在-wall-wextra-pedantic
上编译带有所有警告的代码。 编译器会告诉您可能有问题。 像对待错误一样对待警告。