2013-03-20 3 views
-2

У меня есть домашнее задание написать программу, которая угадывает мой номер, но я должен сделать это без ввода номера. Только y/n вопрос. Вот мой код до сих пор, но он работает неправильно. Например, он не может угадать цифры 24,50 и 75. Она работает и работает вниз правильно с вводом номера, но не может понять, как сделать это без него, поэтому, пожалуйста, дайте мне несколько советов :)Угадайте мой номер! C++

#include <iostream> 

    using namespace std; 

    int main() 
    { 

    cout << "Think of a number 1-100!!\n"; 

     bool l=false; 
     int min=0; 
     int max=100; 
     int ind; 
     int h; 
     char answer; 
     int tries=0; 
     do 
     { 
      ind=(min+max)/2; 
      cout << "Is your number bigger than " << ind << "? (y/n): "; cin >> answer; 
      if(answer=='y') 
      { 
       h=ind+(ind/2); 
      } 
      else 
      { 
       h=ind-(ind/2); 
      } 
      tries++; 
      if(ind>h) 
      { 
       max=ind-1; 
       //cout << "ind: " << ind << endl; 
       //cout << "h: " << h << endl; 
      } 
      else if(ind<h) 
      { 
       min=ind+1; 
       //cout << "ind: " << ind << endl; 
       //cout << "h: " << h << endl; 
      } 
      else if(ind=h) 
      { 
       l=true; 
       //cout << "ind: " << ind << endl; 
       //cout << "h: " << h << endl; 
       cout << h << " is your number!\nWow I guessed it in " << tries << " tries!\nPat me!"; 
      } 
     }while(!l && min<=max); 

     return 0; 
    } 
+2

Вы получаете ошибки компилятора или ошибки компоновщика или запускаете? Это крушение? Какой результат вы видите, и какой результат вы ожидаете увидеть? Как мы можем исправить ваш код, если вы не скажете нам, что случилось? –

+3

Угадайте мой номер? Hm, 'printf (" 42 ");' кажется разумной реализацией. – 2013-03-20 17:18:58

+0

почему так много -? Oo – fviktor99

ответ

2

Я вижу назначение в заявлении, если (=) , Должен быть равным маркеру (==).

+1

Верьте или нет, в этой ОЧЕНЬ КОНКРЕТНОЙ СИТУАЦИИ это не имело значения, но вы должны исправить это независимо. Может быть, объясните нам, ПОЧЕМУ это не имеет значения для некоторых бонусных баллов по вашему вопросу. – franji1

+0

На самом деле, это имеет значение, если вы допустили 0 в качестве выбора: -D – franji1

+0

'ind' может быть только нулем, если оба' min' и 'max' равны нулю. –

3

В случае 50 на первой итерации ваш ind равен 50. Затем вы спрашиваете, больше ли число, чем 50, и ответ на это нет. В этом случае вы вычисляете h как ind-(ind/2), который равен 25, затем вы сравниваете его с ind и устанавливаете max - 49, затем продолжаете цикл. Но это неверно, потому что вы выбрасываете правильный ответ 50, устанавливая в этом случае max - 49.

1

Теперь, когда я прочитал ваш код, он почти имеет смысл. Но ваше использование h ... неправильно. Вот резюме. Подумайте об этом коде на первый поворот, когда число пользователя составляет 50, а ind составляет 50.

cin >> answer; 

if(answer=='y') 
    h=ind+(ind/2); 
else 
    h=ind-(ind/2); 

if(ind=h) 
    cout << h << " is your number!\nWow I guessed it in " << tries << " tries!\nPat me!"; 
0

Это легко сделать код вопроса-догадку, но с другой стороны, было бы скучным, если он d спросите у вас 50 раз, если ваш номер равен 50, начиная с 0, поэтому одна из сторон делает его более интересным - это сделать переменную для прыжков, но сохранить запись для Max & Min Важно, также вы можете добавить Machine Learning по дисперсии прыжка, чтобы сделать it intelligent

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