我的讲师要求我们编写一个循环,要求用户猜测1-100之间的随机数。当我测试该程序时,我发现获得正确数字的最快方法总是猜测中间数字。然后我被告知这种方式称为二进制搜索算法。因此,我正在考虑编写另一个程序,以使计算机可以使用二进制搜索来猜测随机数。好吧,我的程序得到了正确的数字,但是确实有一个错误困扰着我,那就是猜测的数量增加了1。谁能给我一个提示?

class Program
{
    static void Main(string[] args)
    {
        int start = 0;
        int end = 100;
        Random myRandom = new Random();
        int computer = myRandom.Next(start, end);
        int count = 1;
        int guess;
        guess = (end - start) / 2 + start;
        Console.WriteLine("Computer number: {0}, your guess is: {1}", computer, guess);
        Console.WriteLine("Count {0}", count);
        while (guess != computer)
        {
            guess = (end - start) / 2 + start;
            if (guess > computer)
            {
                end = guess;
                Console.WriteLine("Your guess is too high, next guess: {0}", guess);
            }
            else
            {
                start = guess;
                Console.WriteLine("Your guess is too low, guess again: {0}", guess);
            }
            count = count + 1;
            Console.WriteLine("Count {0}", count);
        }
        Console.WriteLine("You got it. The number is {0}. It took you {1} guesses.", computer, count);
        Console.ReadKey();
    }
}


这是结果,计数应该是7而不是8


  计算机号:77,您的猜测是:50
  数1
  您的猜测太低,再次猜测:50
  数2
  您的猜测太低,再次猜测:75
  数3
  您的猜测太高,下一个猜测:87
  数4
  您的猜测太高,下一个猜测:81
  数5
  您的猜测太高,下一个猜测:78
  数6
  您的猜测太低,再次猜测:76
  数7
  您的猜测太低,再次猜测:77
  数8
  你说对了。数字是77。您花了8个猜测。

最佳答案

宣告

int count = 0;


代替

int count = 1;


应该解决问题。

编辑:

是的,你是对的。如果您移动一些代码并删除一些代码,它将变成这样

static void Main(string[] args)
{
    int start = 0;
    int end = 100;
    Random myRandom = new Random();
    int computer = myRandom.Next(start, end);
    int count = 0;
    int guess;

    while (true)
    {
        guess = (end - start) / 2 + start;
        count = count + 1;
        Console.WriteLine("Count {0}", count);
        if (guess > computer)
        {
            end = guess;
            Console.WriteLine("Your guess is too high, next guess: {0}", guess);
        }
        else if (guess < computer)
        {
            start = guess;
            Console.WriteLine("Your guess is too low, guess again: {0}", guess);
        }
        else
        {
            break;
        }
    }
    Console.WriteLine("You got it. The number is {0}. It took you {1} guesses.", computer, count);
    Console.ReadKey();
}


您不必以这种方式编写两次代码(就像之前和之后一样)

关于c# - 二进制搜索一个猜数字,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35092672/

10-12 01:17
查看更多