【问题标题】:CS50 Pset 3 Finding the NeedleCS50 Pset 3 找针
【发布时间】:2016-07-30 12:51:26
【问题描述】:

我意识到当我在布尔搜索中包含“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;
}

【问题讨论】:

    标签: c cs50


    【解决方案1】:

    仔细看代码:

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

    循环体总是从函数返回——因此它只会运行一次(假设n &gt; 0)。这和测试value是否在大海捞针一样。

    如果取出else分支,循环体中的代码只有在找到值时才返回。如果没有找到,它会检查下一个元素,下一个等等,直到你找到它或者你用完了元素。

    【讨论】:

      【解决方案2】:

      我认为你应该先实现排序功能。没有 sort 搜索将无法工作。如果你用针试试上面的代码说 1 并且你在 1 开头如果 haystack 它将返回 true 。但是,如果您将 1 放在干草堆的第二个中,即使您正在寻找 1 ,它也会返回 false 。

      【讨论】:

      • 我认为这更适合作为评论而不是作为答案。
      猜你喜欢
      • 2022-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多