Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 什么';这个二进制搜索函数有什么问题?_C_Binary Search - Fatal编程技术网

C 什么';这个二进制搜索函数有什么问题?

C 什么';这个二进制搜索函数有什么问题?,c,binary-search,C,Binary Search,我试图解决一个二进制搜索的Spoj问题,但我一直得到“错误答案”,我看不到我的问题。 以下是我的b搜索功能: int binarySearch(int numbers[], int size, int key) { int start = 0; int end = size - 1; int middle; while(start <= end) { middle = start + (end - start)/2;

我试图解决一个二进制搜索的Spoj问题,但我一直得到“错误答案”,我看不到我的问题。 以下是我的b搜索功能:

int binarySearch(int numbers[], int size, int key)
{
    int start = 0;
    int end = size - 1;
    int middle;

    while(start <= end)
    {
        middle = start + (end - start)/2;

        if(key < numbers[middle])
            end = middle - 1;
        else if(key > numbers[middle])
            start = middle + 1;
        else
            return middle;
    }

    return -1;
}
int-binarySearch(int-number[],int-size,int-key)
{
int start=0;
int end=大小-1;
中间;
while(起始编号[中间])
开始=中间+1;
其他的
返回中间;
}
返回-1;
}
这是我的主要功能

int main()
{
    int *numbers;
    int n_numbers, n_queries, key, i, found;

    scanf("%d %d", &n_numbers, &n_queries);
    numbers = (int*)malloc(n_numbers * sizeof(int));

    for(i = 0; i<n_numbers; i++)
        scanf("%d", &numbers[i]);

    for(i = 0; i<n_queries; i++)
    {
        scanf("%d", &key);
        found = binarySearch(numbers, n_numbers, key);
        printf("%d\n", found);
    }

    return 0;
}
intmain()
{
整数*数字;
int n_编号,n_查询,键,i,find;
scanf(“%d%d”、&n\u编号和&n\u查询);
数字=(int*)malloc(n_数字*sizeof(int));

对于(i=0;i您的算法是正确的。数据未排序,因此您的二进制搜索算法无法正确地对解决方案进行归零。

您的算法是正确的。数据未排序,因此您的二进制搜索算法无法正确地对解决方案进行归零。

不完全清楚您使用的是哪种基于C的语言,但可能会使用表达式sion(end-start)/2可能返回一个浮点值,当您实际需要舍入该值时,该值会被截断为整数?

不完全清楚您使用的是哪种基于C的语言,但可能是表达式(end-start)/2是否可能返回一个浮点值,当您实际希望将该值四舍五入时,该值会被截断为整数?

问题是,您需要返回第一次出现的位置(从零开始),并且在找到键后立即返回

但阵列可能是: 0112


键是1。您应该返回1(第一次出现的位置),而不是返回6。

问题是,您需要返回第一次出现的位置(从零开始),并且在找到键后立即返回

但阵列可能是: 0112



并且键是1。您应该返回1(第一次出现的位置)相反,您返回的是6。

似乎是正确的。您能给出输入/输出示例吗?为了使其工作,您必须对正在进行二进制搜索的数组进行排序POJ没有给出测试用例,所以我不知道它为什么说wrong@J0rge:您至少可以将lin添加到SPOJ问题中。这是错误的,因为您传递的数据未排序。您必须对Spoj/客户端提供的数据进行排序。然后运行二进制搜索。似乎是正确的。您能给出输入/输出示例吗?为了使其正常工作,您必须对二进制搜索的数组进行排序。Spoj没有给出测试用例,所以我不知道为什么它会这样说wrong@J0rge:您至少可以在SPOJ问题中添加lin。这是错误的,因为您要传递的数据没有排序。您必须对Spoj/客户端提供的数据进行排序。然后运行二进制搜索。可能是这样的问题:。如果调用方没有提供排序数据,则B搜索毫无用处。@Zeta是的,非常肯定。可能是这样的问题:。如果调用方没有提供排序数据,则B搜索毫无用处。@Zeta是的,非常肯定。这是因为缺少排序数据。请注意OP假设数据将如何排序,这不是保证。这是因为缺少排序数据。请注意OP假设数据将如何排序,这不是保证。请简要说明下一个问题:如果问到SPOJ,请添加问题的链接,无论如何至少复制com请描述一下。我必须遵循Zeta提供的链接,才能发现你应该返回第一个事件(而不是任何事件)。好的,很抱歉。我将为可能需要帮助的人编辑我的问题。请为下一个问题提供一个简短说明:如果您询问SPOJ,请添加问题的链接,无论如何至少复制完整的描述。我必须按照Zeta提供的链接查找您是否应该返回第一个事件(没有发生)。好的,很抱歉。我将为可能需要帮助的人编辑我的问题