我的讲师要求我们编写一个循环,要求用户猜测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/