我是C ++的新手,想解决递归查找问题
使得输入以整数T(T≤100)开始,即测试用例的数量。
接下来的2 * T行中的每一行都将以整数N(1 例如
输入:
2
5 5 13 -11 19 93
-19
3 15 65 -18
-18
输出应为
情况1:否
情况2:是
我解决问题的代码是
#include <iostream>
#include <sstream>
using namespace std;
bool find(int values[],int x,int i);
int main(){
int n, len,x ;
cin >> n;
std::ostringstream oss;
for(int i =1;i<=n;i++){
cin >> len;
int values [len];
for (int j =0;j<len;j++){
cin >> values[i];
}
cin>>x;
oss<< "Case "<< i << ": " << (find(values,x, (len-1))?"YES":"NO") << "\n";
}
cout << oss.str() << endl;
return 0;
}
bool find(int values [],int x, int i){
if(values[i] ==x)
return true;
else{
if(i ==0)
return false;
return find(values,x,i-1);
}
}
该代码在我的设备上可以正常运行,但是在提交时会导致分段错误。
我在哪里做错了?
最佳答案
看起来您正在使用变量i遍历测试用例的数量,但是您也正在使用该变量将整数读入数组中的某个索引。您应该改用变量j将整数读入数组。
更改
for (int j = 0; j < len; j++){
cin >> values[i];
}
至
for (int j = 0; j < len; j++) {
cin >> values[j];
}