Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 计算机在你的思维中猜测一个数字所需的猜测量_Java_Logic - Fatal编程技术网

Java 计算机在你的思维中猜测一个数字所需的猜测量

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

好的,所以问题不一定是实际的代码,因为它可以工作,而是逻辑。问题是计算机需要多少次猜测才能得到你所想的数字?在1-100之间,只要在1-100之间,它总是会在7次尝试中猜出你的号码,不管是什么。下一个问题是1-50怎么样,我发现只要5次就可以猜出你的号码

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))作为“试验”次数的上限;当然,这只适用于排序数据。