【问题标题】:How do i change this code to only print the total number of guesses when it has found the target我如何更改此代码以仅在找到目标时打印猜测总数
【发布时间】:2016-12-25 20:28:16
【问题描述】:

我正在尝试完成一项关于可汗学院的测验。它要求我仅在找到目标后打印猜测的总数。

测验链接: link

/* Returns either the index of the location in the array,
  or -1 if the array did not contain the targetValue */
var doSearch = function(array, targetValue) {
    var min = 0;
    var max = array.length - 1;
    var guess;
    while(min <= max) {
        guess = Math.floor((max + min) / 2);
        if (array[guess] === targetValue) {
            return guess;
        else if (array[guess] < targetValue) {
            min = guess + 1;
        }
        else {
            max = guess - 1;
            println(guess);
        }
    }
    return -1;
};


var primes = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 
              41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97];

var result = doSearch(primes, 73);
println("Found prime at index " + result);

Program.assertEqual(doSearch(primes, 73), 20);

【问题讨论】:

  • 找到目标后代码的哪一部分运行?发生这种情况时,您可以运行println(guess) 吗?此外,您还有语法错误。您在第一个 if 块的末尾缺少 }
  • 我测试了你的代码,如果你添加了缺少的},你的代码在最后一行通过了测试。

标签: javascript algorithm computer-science binary-search khan-academy


【解决方案1】:

这是我使用的有效代码:

    /* Returns either the index of the location in the array,
  or -1 if the array did not contain the targetValue */
var doSearch = function(array, targetValue) {
    var min = 0;
    var max = array.length - 1;
    var guess;
    var guesscount = 0;
    while( min <= max ){
        guess = Math.floor((min + max) / 2);
        println(guess);
        guesscount = guesscount + 1;
        if( array[guess] === targetValue ){
            println("Found prime in " + guesscount + " guesses");
            return guess;
        } else if( array[guess] < targetValue ){
            min = guess + 1;
        } else{
            max = guess - 1;
        }
    }
    return -1;
};

var primes = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 
        41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97];

var result = doSearch(primes, 73);
println("Found prime at index " + result);

Program.assertEqual(doSearch(primes, 73), 20);

【讨论】:

    【解决方案2】:

    您需要一个变量来计算您的猜测。 添加

    var guesscount;

    到定义其他变量的函数体,然后在while循环中通过添加来增加它

    guesscount = guesscount + 1;

    在你的 if 语句之前。然后您可以使用

    打印结果

    println("Number of guesses: " + guesscount);

    【讨论】:

      【解决方案3】:

      尝试添加一个全局变量来保存猜测的数量,并在我处理新的猜测时增加它。在每次新搜索开始时将其设置为零。

      当你做到这一点后,你可以将全局变量放入 doSearch 函数中,并将 doSearch 函数的返回类型更改为数组。然后该数组可以保存原始返回值和猜测次数。

      【讨论】:

      • 可以通过提供代码示例来改进此答案。这样会更清楚。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-02-28
      • 2016-02-20
      • 2020-04-06
      • 1970-01-01
      • 2017-12-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多