【问题标题】:Binary Search using C# creating guessing game使用 C# 创建猜谜游戏的二进制搜索
【发布时间】:2021-04-16 02:03:38
【问题描述】:

我是学习 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() 读取一个 new
  • 在 C# 中,在方法中声明的变量应该以小写字母开头。 PascalCase 用于在单词class 下方声明的public 成员

标签: c# data-structures binary-search game-theory


【解决方案1】:

您需要读取一次Line,并将其存储在一个变量中以供您的所有 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++;
      }      
    }

  }

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多