2013-09-10 3 views
2

Я ударил этот пункт по заданию, и я надеялся на некоторое руководство. В принципе, предполагается, что в программе предполагается, что пользователь будет иметь число от 1 до 100, а затем спросить, превышает ли он или меньше 50. Затем программа выводит среднюю точку до диапазона до тех пор, пока ответ не будет правильным. Например, если бы было введено «h», тогда было бы задано, будет ли число 75, если ответ будет «l», он спросит, имеет ли число 67 и т. Д.Застревание по назначению java, алгоритм двоичного поиска

Я думаю, что я создал фреймворк, но я я действительно борюсь с тем, как подойти к следующему шагу в поиске середины. Любое руководство будет высоко оценено.

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")); 
     } 
}  
+0

Пожалуйста, обратитесь http://algs4.cs.princeton.edu/11model/BinarySearch.java.html Надеюсь, это будет полезно –

ответ

2

Я не собираюсь писать решение, но я постараюсь указать вам в правильном направлении. Надеюсь, что вы пойдете и на правильном пути, чтобы реализовать решение самостоятельно. Не стесняйтесь задавать конкретные вопросы, если что-то неясно.

Вам нужно создать две переменные, чтобы отслеживать ваши нижние и верхние границы для угадывания.

int lowerBound = 0; 
int upperBound = 100; 

Затем итеративно угадать середину, которая:

(upperBound + lowerBound)/2; 

Допустим, вы догадываетесь 50. Затем пользователь вводит H. Это означает, что число больше 50, но меньше 100. Так что теперь вы знаете, что ваша новая нижняя граница 50, устанавливается:

lowerBound = 50; 

И повторить процесс, на этот раз (upperBound + lowerBound)/2; дает вам 75, и так на. Вы знаете, что вы закончили гадание, если lowerBound равен upperBound. Остается только структурировать этот процесс в цикле, и все готово.

+1

Технически вы хотите (lowerBound + upperBound) >>> 1, если вы хотите положительные числа и хотите избежать переполнения –

0

В основном в вашем вопросе вы хотите пользователю вводить или думать число между 1-100 и спросить, если она выше или ниже, чем 50. Так что для этого вам нужно иметь две переменные, такие как, например,

int first = 0; and int last = 100; 

А чтобы получить среднюю точку, пока ответ не является правильным

int middle = (first + last)/2; 

Здесь вы можете обратиться binary search algorithm для получения дополнительной информации.

Надеюсь, это поможет!

0

включая

использование пространства имен std;

// прототипы функции

недействительного playOneGame();

void getUserResponseToGuess (int guess, char & результат);

int getMidPoint (int low, int high);

// Основной метод

INT Основной()

{

//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); 

     } 

} 

}

// Эта функция вводит компьютер догадку и отображает его // для пользователя.

недействительным getUserResponseToGuess (интермедиат догадка, обугливается & результат)

{

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

cin >> result; 

}

// Эта функция вводит низкий и высокий, и он возвращает // среднюю точку между ними.

INT getMidPoint (интермедиат низкий, высокий INT)

{

return (low + high)/2; 

}

Смежные вопросы