使用 C# 创建猜谜游戏的二分搜索

问题描述

我是 C# 初学者:

我需要使用二分查找来让计算机猜测用户的“幻数”5x。我知道我的 if 语句有缺陷,但我很难将二进制搜索转换为代码。

用户在头脑中选择数字,计算机只允许 5 次机会猜测用户的数字。如果计算机猜测的数字小于用户的幻数,则用户选择 1,如果计算机猜测的数字大于用户的幻数,则选择 2,如果计算机猜对,则选择 3。

以下是我目前所拥有的。

using System;

namespace NumberGuessingGame
{
    class Program
    {
        static void Main(string[] args)
        {
            int Low = 1;
            int High = 100;
            int DifferenceOfRange = High - Low;
            int Midpoint = DifferenceOfRange / 2;
            int MidValue = Low + Midpoint;
            int Count = 0;
            bool MagicNumber = true;

            Console.WriteLine("Pick a magic number between 1 to 100. Press enter to continue");
            Console.ReadKey();
            Console.WriteLine("Is your magic number: {0}",MidValue);
            Console.WriteLine(" 1: No my magic number is lower \n 2: No my magic number is greater \n 3: That is my magic number! ");
            if (int.Parse(Console.ReadLine()) == 3)
            {
                Console.WriteLine("Computer Wins!");
                MagicNumber = false;
            }
            while (Low <= High && MagicNumber && Count <= 5)
            {                                   
                DifferenceOfRange = High - Low;
                Midpoint = DifferenceOfRange / 2;
                MidValue = Low + Midpoint;
              
                if (Low < High && int.Parse(Console.ReadLine()) == 2)
                {
                    Low = MidValue + 1;
                    Console.WriteLine("Your number is {0}",MidValue);           
                }
                else if(Low > High && int.Parse(Console.ReadLine()) == 1)
                {
                    High = MidValue - 1;
                    Console.WriteLine("Your number is {0}",MidValue);          
                }
                else if (Count >= 5)
                {
                    Console.WriteLine("Computer loses");
                }
                Count++;
            } 
        }
    }
}

解决方法

您需要 readLine 一次,并将其存储在一个变量中以用于您的所有 if 语句。

using System;


namespace NumberGuessingGame
{
  class Program
  {


    static void Main(string[] args)
    {


      int Low = 1;
      int High = 100;
      int DifferenceOfRange = High - Low;
      int Midpoint = DifferenceOfRange / 2;
      int MidValue = Low + Midpoint;
      int Count = 1;
      bool MagicNumber = true;

      Console.WriteLine("Pick a magic number between 1 to 100. Press enter to continue");
      Console.ReadKey();
      while (Low <= High && MagicNumber)
      {
        DifferenceOfRange = High - Low;
        Midpoint = DifferenceOfRange / 2;
        MidValue = Low + Midpoint;

        Console.WriteLine("Is your magic number: {0}",MidValue);
        Console.WriteLine(" 1: No my magic number is lower \n 2: No my magic number is greater \n 3: That is my magic number! ");
          int userChoice = int.Parse(Console.ReadLine());
        if (userChoice == 3)
        {
          Console.WriteLine("Computer Wins!");
          MagicNumber = false;
        }

        if (Low < High && userChoice == 2)
        {
          Low = MidValue + 1;
          //Console.WriteLine("Your number is {0}",MidValue);
        }
        else if (Low < High && userChoice == 1)
        {
          High = MidValue - 1;
          //Console.WriteLine("Your number is {0}",MidValue);
        }
        if (Count >= 5)
        {
          Console.WriteLine("Computer loses");
          MagicNumber = false;
        }
        Count++;
      }      
    }

  }

}

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...