2

我在一项任务中达到了这一点,我希望得到一些指导。基本上,该程序应该让用户想到一个介于 1-100 之间的数字,然后询问它是高于还是低于 50。然后程序输出该范围的中点,直到答案正确为止。例如,如果输入了“h”,它将询问数字是否为 75,如果响应为“l”,它将询问数字是否为 67,等等。

我想我已经建立了框架,但我真的在努力寻找下一步如何找到中点。任何指导将不胜感激。

import java.util.Scanner;

public class numberguess 
{

    public static void main(String[] args) 
    {    
        String shouldPlayAgain = "y";
        String response = "h";

        Scanner keyboard = new Scanner(System.in);

        do
            {
                System.out.println("Guess a number between 1 and 100.");
                System.out.print("Is it 50? (h/l/c): ");
                response = keyboard.nextLine();

                    if (response.equals("h"))
                        {
                            System.out.println("Is it 75? (h/l/c): ");
                        }

                    if (response.equals("l"))
                        {
                            System.out.println("Is it 25? (h/l/c): ");
                        }

                System.out.print("Great! Do you want to play again? (y/n): ");
                shouldPlayAgain = keyboard.nextLine();
            }
        while (shouldPlayAgain.equals("y"));
        }
}       
4

3 回答 3

2

我不会写出解决方案,但我会尝试为您指出正确的方向。希望这会让您走上正确的轨道,自己实施解决方案。如果有任何不清楚的地方,请随时提出具体问题。

您需要创建两个变量来跟踪猜测的下限和上限。

int lowerBound = 0;
int upperBound = 100;

然后你迭代地猜中间,也就是:

(upperBound + lowerBound) / 2;

假设你猜50。然后用户进入H。这意味着数字大于 50,但小于 100。所以现在您知道新的下限是 50,设置:

lowerBound = 50;

并重复这个过程,这次(upperBound + lowerBound) / 2;给你 75,以此类推。你知道你已经猜到了lowerBound是否等于upperBound。剩下的就是在一个循环中构建这个过程,你就完成了。

于 2013-09-10T05:11:29.853 回答
0

基本上在您的问题中,您希望用户输入或考虑 1-100 之间的数字并询问它是高于还是低于 50。因此,为此您需要有两个变量,例如

int first = 0; and int last = 100;

并得到中点,直到答案正确

int middle = (first + last) / 2;

在这里您可以参考二进制搜索算法以获取更多信息。

希望能帮助到你!!

于 2017-10-12T11:55:24.087 回答
-1

包括

使用命名空间标准;

//函数原型

无效 playOneGame();

void getUserResponseToGuess(int guess, char& result);

int getMidPoint(int low, int high);

//主要方法

主函数()

{

 //declare variables

 char response;

 //promt the users choice

 cout << "Ready to play (y/n)? ";

 cin >> response;

 //reapeat the loop until the user'c choice is no

 while (response == 'y')

 {

      //Call the function initially

      playOneGame();

      cout<<"Great! Do you want to play again (y/n)? ";

      cin >> response;

 }

 cout << "Thanks for playing!" << endl;

 system("pause");

 return 0;

}

//实现函数playOneGame

无效 playOneGame()

{

 //initialGuess

 int guess = 50;       // initial guess

 int low = 1;       // initial low point

 int high = 100;       // initial high point

 char result;

 cout<< "Think of a number between 1 to 100. " << endl;

//调用函数猜测用户数 //通过二分查找

 getUserResponseToGuess(guess, result);

 //Repeat the loop, until the answer is correct

 while (result != 'c')

 {

      //If the answer is high

      if (result == 'h')

      {

          low = guess;

          //compute the midpoint

          guess = getMidPoint(low, high);

          //call the function

          getUserResponseToGuess(guess, result);

      }

      else

      {

          high = guess;

          guess = getMidPoint(low, high);

          getUserResponseToGuess(guess, result);

      }

 }

}

//此函数输入计算机猜测并将其显示给用户。

void getUserResponseToGuess(int guess, char& result)

{

 cout << "Is it " << guess << " (h/l/c)?"<< endl;

 cin >> result;

}

//这个函数输入低和高,并返回它们之间的中点。

int getMidPoint(int 低,int 高)

{

 return (low + high) / 2;

}

于 2018-03-06T23:23:50.687 回答