我是c ++的新手,想要解决递归查找问题 这样输入以整数T(T≤100)开始,即测试用例的数量。 接下来的2 * T行中的每一行将以整数N(1 <= N <= 100)开始,整数个数后跟N空格分开。这些N个整数中的每一个将在-1000和1000(包括)之间。然后下一行将具有X(-1000 <= X <= 1000),表示要搜索的数字。 例如
输入:
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);
}
}
代码在我的设备上正常运行,但是,提交时会导致分段错误。 我哪里做错了?
答案 0 :(得分:1)
看起来您正在使用变量 i 迭代测试用例的数量,但您正在使用该变量将整数读入数组中的某个索引。您应该使用变量 j 将整数读入数组。
更改
for (int j = 0; j < len; j++){
cin >> values[i];
}
到
for (int j = 0; j < len; j++) {
cin >> values[j];
}