我参加了编码示例测试,我认为这很容易。他们要求查找数字是否出现在数组中(打印出“是”)或否(打印出“否”)。首先,我想提出一种二进制搜索方法。但是,当我看到它们的给定功能时,我认为不适合使用该方法。
在描述中,他们提到arr []和k作为我们需要检查k是否出现在arr []中的数字。
char* findNumber(int arr_count, int arr[], int k)
{
int n = sizeof(arr)/sizeof(arr[0]);
for(arr_count = 0; arr_count < n; arr_count++)
{
if(arr[arr_count]==k)
cout<<"YES";
else
cout<<"NO";
}
return 0;
}
但是当我编译时,它显示输出为空。不知道为什么我解决了许多更困难的问题。因此,当我在一个简单的任务中出错时,我感到非常难过。请告诉我错误的部分。
答案 0 :(得分:3)
这里
char* (int arr_count, int arr[], int k) { }
由于array decaying,编译器将int arr[]
更改为int *arr
。所以当你这样做
int n = sizeof(arr)/sizeof(arr[0]);
sizeof(arr)
的大小为int*
,而n
始终为1
。
因此而
for(arr_count = 0; arr_count < n; arr_count++) {
/* some stuff */
}
仅重复一次。
答案 1 :(得分:2)
int n = sizeof(arr)/ sizeof(arr [0]);
至少这是不正确的,因为将数组arr
传递给函数时会衰减为指针。
因此sizeof(arr)/sizeof(arr[0])
实际上是sizeof(pointer)/sizeof(int)
。因此n
始终为1。而for
循环始终仅运行一次迭代(当arr_count == 0时)。
for(arr_count = 0; arr_count
这也是不正确的-因为您不应该修改arr_count
,它是输入数组的大小。您应该为循环使用一个单独的变量。
for( int i = 0; i < arr_count; ++i )
答案 2 :(得分:1)
#include<iostream>
const char* findNumber(int arr_count, int arr[], int k)
{
for(int i = 0; i < arr_count ; i++)
{
if(arr[i]==k)
return "YES";
}
return "NO";
}
int main()
{
int array[] = { 2,36,42,8,85,35,225,100};
std::cout << findNumber(sizeof(array)/sizeof(array[0]),array,43) << std::endl;
std::cout << findNumber(sizeof(array)/sizeof(array[0]), array, 85) << std::endl;
return 0;
}
你去了。固定且工作正常。输出“否”,然后输出“是”。