Java 计算机在你的思维中猜测一个数字所需的猜测量
好的,所以问题不一定是实际的代码,因为它可以工作,而是逻辑。问题是计算机需要多少次猜测才能得到你所想的数字?在1-100之间,只要在1-100之间,它总是会在7次尝试中猜出你的号码,不管是什么。下一个问题是1-50怎么样,我发现只要5次就可以猜出你的号码Java 计算机在你的思维中猜测一个数字所需的猜测量,java,logic,Java,Logic,好的,所以问题不一定是实际的代码,因为它可以工作,而是逻辑。问题是计算机需要多少次猜测才能得到你所想的数字?在1-100之间,只要在1-100之间,它总是会在7次尝试中猜出你的号码,不管是什么。下一个问题是1-50怎么样,我发现只要5次就可以猜出你的号码 import java.util.Scanner; public class ThinkofaNumber { public static void main(String[] args) { Scanner in = new Sca
import java.util.Scanner;
public class ThinkofaNumber {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println("Guess a number between 1 and 100");
System.out.println();
int input = 0;
//guess is equal to half the highest number
int guess = 50;
//low is equal to the lowest
int low = 1;
//high is equal to the highest number
int high = 101;
int tries = 1;
while (input != 2) {
System.out.println("Is your number " + guess + "?");
System.out.println("1: No, my number is lower");
System.out.println("2: Yes, that is my number");
System.out.println("3: No, my number is higher");
System.out.println();
input = in.nextInt();
if (input == 1) {
high = guess;
guess = low + (guess - low) / 2;
tries++;
} else if(input == 3) {
low = guess;
guess = guess + (high - guess) / 2;
tries++;
}
}
System.out.println("Your number is " + guess + "!");
if (tries == 1) {
System.out.println("It took 1 try to guess " + guess);
} else {
System.out.println("It took " + tries + " guesses to get " + guess);
}
}
}
问题是,接下来的问题是,如果数字在1到400之间,你认为最大猜测次数是多少?如果在1到800之间呢?在1到1600之间?我认为它试图让我找到一种模式或算法,但我没有看到。你们觉得怎么样?你们所说的算法是一种二进制搜索算法 您所说的算法是一种二进制搜索算法 正如Wojciech所说,这是一种二进制搜索算法。数字7来自以下log2(100)=6.6,取整为7
因此,您可以使用log base 2来查找猜测次数,正如Wojciech所说,这是一种二进制搜索算法。数字7来自以下log2(100)=6.6,取整为7
因此,您可以使用log base 2来查找猜测的次数,只是为了从@Wael的答案中提供更多的细分 关于二进制搜索算法的更多讨论可以在中找到,我们知道2N+1-1给出了任意数量猜测N的范围(
1..X
)
因此,我们可以说:
2N+1-1=800
2N+1=801
log2801=N+1
log2801-1=N
i、 e.8.646=N,N=9
因此,猜测1到800之间的数字最多需要9次猜测
我还应该指出,2N+1-1是最坏的情况,因此,当试图找到给定输入的猜测次数时,它将根据输入而变化 只是从@Wael的回答中再提供一点细分 关于二进制搜索算法的更多讨论可以在中找到,我们知道2N+1-1给出了任意数量猜测N的范围(
1..X
)
因此,我们可以说:
2N+1-1=800
2N+1=801
log2801=N+1
log2801-1=N
i、 e.8.646=N,N=9
因此,猜测1到800之间的数字最多需要9次猜测
我还应该指出,2N+1-1是最坏的情况,因此,当试图找到给定输入的猜测次数时,它将根据输入而变化 这不是一个编程问题,所以我不知道你为什么在这里发布它。实际上,可能需要对50个选项进行6次猜测。这似乎是一个编程概念,因为它与我发布的代码直接相关。然而,我是新来的,有没有更好的地方发布这个?@Jeremy这不是一个编程问题,所以我不知道你为什么在这里发布它。实际上,50个选项可能需要6次猜测。这似乎是一个编程概念,因为它与我发布的代码直接相关。然而,我是新来的,有没有更好的地方发布此消息?@Jeremy您可能想添加两条基本信息:关于将O(log(n))作为“试验”次数的上限;当然,这只适用于排序数据。您可能需要添加两条基本信息:关于将O(log(n))作为“试验”次数的上限;当然,这只适用于排序数据。