我试图在矢量b中找到矢量a。因此,如果向量a在向量b中,则返回true,否则返回false。矢量a应该像{1,2,3},b应该像{4,1,2,3,5,5,7}。这段代码的输出结果为真1和假0.所以我的问题是我不希望1和0出现在输出中。 另外我想以递归形式编写这段代码,所以有人可以帮我解决这个问题吗?
bool x(vector<int>& a, vector<int> b)
{
vector<int> index ( b.size(),0 );
int counter = 0;
if ( a.size() <= b.size() ) {
for ( int i = 0; i < a.size(); i++ ) {
for ( int j = 0; j < b.size(); j++ ) {
if ( a[i]== b[j]) {
index[j] = 1;
}
}
}
for ( int i = 0; i < index.size(); i++ ) {
if ( index[i] == 1 ) {
for ( int j = i; j < index.size(); j++ ) {
if ( index[j] == 1 ) {
counter++;
}
}
if(counter == a.size()){
cout<<"true"<<endl;
return true;
break;
}
else{
counter = 0;
cout<<"false"<<endl;
return false;
// continue;
}
}
}
}
return 0;
}
答案 0 :(得分:1)
如果你不喜欢输出:true 1和false 0.最简单的解决方法是:
if(x(a, b)){
cout<<"true"<<endl;
} else {
cout<<"false"<<endl;
}
但是,在尝试将算法转换为递归算法之前,我担心你的算法是错误的。试试这个:
vector<int> a;
vector<int> b;
a.push_back(1);
a.push_back(2);
a.push_back(3);
b.push_back(1);
b.push_back(1);
b.push_back(1);
cout<<x(a,b)<<endl;
你会成真,而正确的答案是错误的。
检查你的算法!
答案 1 :(得分:0)
你看到“true 1”和“false 0”的原因可能是因为当你在函数中打印“true”和“false”作为字符串时,你会返回一个bool,如果你在函数外部打印将会默认打印为“1”和“0”。要解决此问题,您可以使用std::boolalpha
,如此处所述:Converting bool to text in C++
至于将你的算法转换为递归算法,我担心Stack Overflow的主题是你自己尝试的。
答案 2 :(得分:0)
就像John说的那样,你打印的是cout(标准输出)字符串,而不是整数(1/0)。同意偏离主题,您需要建议解决方案并寻求帮助/建议/反馈。网上有很多关于如何使用它的教程。
但是如果你想要递归,你应该创建一个array3,其长度与array1的大小相同,而你将对array2进行递归,以检查array1中是否存在array2的任何元素(作为对象或值)。你需要一个生成数组并接受数组的函数(为什么使用向量?)然后遍历第二个数组,将array1,array3和当前索引值作为参数传递。
Fibonacci递归问题几乎在Uni的每一个编程课程中讲授(或者至少它应该是),所以这是一个很好的起点。
答案 3 :(得分:0)
这个的递归函数:
// it will return true if vector is present
// i is pointer for a
// j is pointer for b
bool subVector(vector<int>& a, vector<int> b,i,j)
{
if( i<a.size() && j<b.size()
{
if(a[i]==b[i])
{
return subVector(a,b,i+1,j+1)
}
else
{
return subVector(a,b,0,j+1)
}
}
else
{
if(i>a.size())
{
return true;
}
else{
return false;
}
}
}
// Calling
subVector(a,b,0,0);
注意:未编译。