CS50 Pset 3寻找针头

时间:2015-06-08 11:36:08

标签: c cs50

我意识到当我在我的布尔搜索中包含“else return false”时,它将永远无法“找到针头”。相反,如果我要删除该部分,该程序工作正常。它能够找到2008而不是2013年。任何想法为什么会如此?

 /**
 * helpers.c
 *
 * Computer Science 50
 * Problem Set 3
 *
 * Helper functions for Problem Set 3.
 */

#include <cs50.h>

#include "helpers.h"

/**
 * Returns true if value is in array of n values, else false.
 */

 //value = needle , values[] = haystack, n = size
bool search(int value, int values[], int n)
{
    // TODO: implement a searching algorithm
    if(n<0)    
    return false;


    for(int i=0;i<n;i++)
    {
        if(value == values[i]) 
        {           
            return true;
        }

        else
        {
            return false;
        }


    }
    return false;
}

/**
 * Sorts array of n values.
 */
void sort(int values[], int n)
{
    // TODO: implement an O(n^2) sorting algorithm
    return;
}

2 个答案:

答案 0 :(得分:2)

仔细查看代码:

for(int i=0;i<n;i++)
{
    if(value == values[i]) 
    {           
        return true;
    }

    else
    {
        return false;
    }


}

循环体总是从函数返回 - 因此它只运行一次(假设为n > 0)。这与测试value是否位于大海捞针的第一个位置相同。

如果取出else分支,循环体中的代码仅在找到值时返回。如果找不到它,它将检查下一个元素,然后检查下一个元素等,直到找到它或者你的元素用完为止。

答案 1 :(得分:0)

我认为你应该先实现排序功能。没有排序,搜索将无法运行。如果你尝试上面的代码,针说1,你开始时只有1,如果haystack,它将返回true。但如果你在大海捞针的第二个中加1,即使你正在寻找1,它也会返回假。