我正在尝试完成对可汗学院的测验。它要求我只在找到目标时打印猜测总数。
测验的链接: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);
尝试添加一个包含猜测数量的全局变量,并在处理新猜测时递增。在每次新搜索开始时将其设置为零。
到目前为止,您可以将全局变量放入doSearch函数并将doSearch函数返回类型更改为数组。然后,数组可以保存原始返回值和猜测数。
你需要一个变量来记住你的猜测。加
var guesscount;
到你的函数体中定义了其他变量,然后在while循环中通过添加来增加它
guesscount = guesscount + 1;
在你的if语句之前。然后,您可以使用打印结果
println("Number of guesses: " + guesscount);
这是我使用的代码:
/* 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);