我需要帮助。我正在阅读教授c ++的教科书并没有很好地教会学生线性搜索算法。因此,我尝试在不使用任何功能的情况下重新创建算法。问题是,我写的代码似乎有一些错误。请注意我使用的是Microsoft Visual Studios 2013 IDE。因此,任何人都可以告诉我我的代码有什么问题吗?这是我用英语写的算法。算法不会显示变量和数组定义,但源代码会显示。
P.S。这不是家庭作业。这只是为了好玩:) 附:由于某种原因,代码格式非常糟糕。
算法:
代码:
#include <iostream>
using namespace std;
int main()
{
// Create the array
int array[6] = {1,2,3,4,5,6};
int number;
// Ask the user to enter a number
cout << "Enter a number: ";
cin >> number;
// Create a for loop to traverse through each number in the array
//to see if it equals the user inputted number
for (int i = 0; i < 6; i++)
{
if (number == array[i])
{
cout << "Number Found: " << array[i] << endl;
}
else if (number != array[i])
{
cout << "Number Not Found!" << endl;
}
}
return 0;
}
如果我输入3,则输出如下:
Number Not Found!
Number Not Found!
Number Found: 3
Number Not Found!
Number Not Found!
Number Not Found!
答案 0 :(得分:1)
每次迭代的逻辑输出决策。但似乎你只能输出一次你的决定。
因此,出于这个原因,全局声明一个布尔变量,并将false设置为该值的值。
每次迭代检查都会找到它。如果找到,则将布尔值设置为TRUE。
for final output check global boolean value true或false和print output
答案 1 :(得分:0)
从循环内移除cout
。使用标志,即如果找到数字,则将其设置为true,然后使用if将print语句写在外面。
int flag=0;
for(int i=0;i<6;i++){
if(number==arr[i])
flag=i+1;
}
if(flag) cout<<"found at position"<<flag;
else cout<<"Not found";
PS:购买更好的教科书
答案 2 :(得分:0)
更轻松,更有趣:
#include <iostream>
#include <vector>
using namespace std;
int main() {
int number;
vector<int> nums{1,2,3,4,5,6};
cout << "Find a number: ";
cin >> number;
for_each(cbegin(nums), cend(nums),
[&](const int& x)
{
if(x == number)
cout << "found " << x << endl;
else
cout << "could not find " << endl;
});
}
但线性搜索的一个很好的起点是:
template<typename I, typename T>
I find (I first, I last, const T& val)
{
while (first != last) {
if (*first == val) return first;
++first;
}
return last;
}