如何创建一个线性搜索算法比我的教科书提供的更容易
How to Create a Linear Searching Algorithm easier than what my textbook provides
我需要帮助。我正在读的教c++的教科书在教学生线性搜索算法方面做得不好。因此,我尝试在不使用任何函数的情况下重新创建算法。问题是,我写的代码似乎有一些错误。请注意,我使用的是Microsoft Visual Studios 2013 IDE。因此,有人能告诉我我的代码出了什么问题吗?这是我用英语写的算法。算法不会显示变量和数组定义,但会显示源代码。
附言:这不是家庭作业。这只是为了好玩:)附言:由于某种原因,代码格式出现了故障。
算法:
- 要求用户输入数字
- 创建for循环
- 在for循环内部遍历数组中的每个元素并进行比较它与用户输入的号码
- 如果数组中的元素等于用户输入的数字,则显示一条消息,说明已找到
- 如果数组中的元素与用户输入的数字不相等,则显示一条消息,说明未找到该元素
代码:
#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!
您每次迭代的逻辑输出决策。但你似乎只需要输出一次你的决定。
因此,出于这个原因,全局声明一个布尔变量,并将false设置为该值的值。
对于每次迭代检查,都会找到它。如果找到,则将布尔值设置为TRUE。
对于最终输出,检查全局布尔值true或false,并打印输出
从循环内部移除cout
。使用标志(如果找到数字,将其设置为true,然后使用if.在外部写入打印语句)
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";
附言:买一本更好的教科书
更简单、更有趣:
#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;
}
相关文章:
- 我的神经网络不起作用 [XOR 问题]
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 我的字符计数代码计算错误.为什么
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- cmake在我的项目中所需的所有静态库都不成功
- 为什么我的代码在输出中增加了93天
- 我的简单if-else语句是如何无法访问的代码
- 为什么我的for循环不能正确获取argv
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- 0-1背包代码中的错误.我的代码中有什么错误
- 当我的阵列太大时出现分段错误
- 如何确认我的constexpr表达式实际上已经在编译时执行
- 为什么二进制搜索在我的测试中不起作用
- 如何指定我希望我的LIB链接到的DLL文件?-Visual Studio 2019
- 我的代码中有错误吗?使用BGI图形的C++代码对我不起作用
- 当我在main中声明了我的2d数组时,为什么我的程序会退出
- OpenGL在启用深度测试时不会丢弃我的碎片
- 为什么我的 std::ref 无法按预期工作?
- 如何创建一个线性搜索算法比我的教科书提供的更容易
- 关于GDI映射在我的教科书的例子