Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.78
Abendstern
3 / 3 / 0
Регистрация: 06.11.2011
Сообщений: 38
#1

Программа, угадывающая число - C++

08.11.2011, 19:26. Просмотров 2830. Ответов 3
Метки нет (Все метки)

Здравствуйте. Решаю задачку из книги Страуструпа:

"Напишите программу, угадывающую число. Пользователь должен задумать число от 1 до 100, a программа должна задавать вопросы, чтобы выяснить, какое число он задумал (например, 'Задуманное число меньше 50'). Ваша программа должна уметь идентифицировать число после не более семи попыток. Подсказка: используйте операторы < и =, a также конструкцию if-else."

Немного подвис над ней, не пойму каким боком использовать здесь операторы сравнения? Написал прогу без их использования, но с вводом ответов пользователем:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <iostream>
 
int main()
{
    int lower = 1; // нижняя граница диапазона
    int upper = 100; // верхняя граница 
    int middle; // середина
 
    char answer;
 
    while(lower != upper)
    {
        middle = (upper + lower) / 2;
        std::cout << "Задуманное число меньше " << middle << "? (y/n)";
        std::cin >> answer;
 
        if(answer == 'y')
            upper = middle;
        else
            lower = middle;
 
        std::cout << "[" << lower << " : " << upper << "]\n";
    }
 
    std::cout << "Ваше число =  " << lower << "\n";
    
    system("pause");
    return 0;
}
Работает мягко говоря через раз... например, если я загадываю число 46, то диапазон становится неизменным и равным [46 : 47], и до истины дело так и не доходит. Может условие выхода из цикла у меня неверное? Или вообще условие задачи я не так понял. Буду благодарен, если что-нибудь посоветуете.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.11.2011, 19:26     Программа, угадывающая число
Посмотрите здесь:

Программа задумывает число от 1 до 10, и предлагает пользователю отгадать число за 5 попыток - C++
В общем нужна помощь по C++: задали задачку на цикл For, программа должна выдавать таблицу значений функции y= (модуль x) x начинается...

Программа, которая вводит число из пяти цифр, разделяет число на отдельные цифры - C++
Напишите программу, которая вводит число из пяти цифр, разделяет число на отдельные цифры и печатает их отдельно друг от друга с тремя...

Вывести N-е полупростое число (программа постоянно выводит число 4; не могу понять в чем ошибка) - C++
ПОМОГИТЕ ПОЖАЛУЙСТА НАЙТИ ОШИБКУ! #include &lt;stdio.h&gt; #include &quot;fstream&quot; #include &lt;iostream&gt; #include &lt;vector&gt; using...

Пол-ль вводит число от 50 до 100. Программа раскладывает число на сумму 4-х квадратов, всеми возможными способами - C++
Пример: 39 = 1^2+2^2+3^2+5^2. Не получается написать код для этой задачи Помогите пож разобраться

Программа, которая считывает число с клавиатуры и находит ближайшее справа число, которое является квадратом натурального числа - C++
Написать программу, которая считывает число с клавиатуры и находит ближайшее справа число, которое является квадратом натурального числа, и...

Ведется набор цифр и надо чтобы программа из него сама сообразило число. То есть что бы программа сама раскидывала их по разрядам. - C++
Люди добрые, только начинаю программировать, пытаюсь освоить не очень простой язык С++. Есть такая задачка... Ведется набор цифр и надо...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
talis
791 / 543 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
08.11.2011, 21:38     Программа, угадывающая число #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <iostream>
 
int main()
{
    int lower = 1; // нижняя граница диапазона
    int upper = 100; // верхняя граница
    int middle; // середина
 
    char answer;
 
    while( lower < upper )
    {
        middle = (upper + lower) / 2;
 
        do
        {
            std::cout << "Is it less or equal then " << middle << "? (y/n)";
            std::cin >> answer;
        }
        while( answer != 'y' && answer != 'n' );
 
        if( answer == 'y' )
            upper = middle;
        else
            lower = middle + 1;
 
        std::cout << "[" << lower << " : " << upper << "]\n";
    }
 
    std::cout << "Your number is  " << upper << "\n";
 
 
    return 0;
}
Вот так. Это классический бинарный поиск.
JustAndEasy
0 / 0 / 0
Регистрация: 08.04.2017
Сообщений: 1
09.04.2017, 01:54     Программа, угадывающая число #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include "iostream"
 
using namespace std;
 
int main() {
    system("chcp 1251 > text");     // Устанавливаем ввод/вывод консоли на русский язык.
 
    int lower = 1;      // Нижняя граница диапазона чисел.
    int upper = 100;    // Нижняя граница диапазона чисел.
    int middle;         // Середина диапазона чисел.
    int trueNum = 100;  // Правильный ответ.
 
    char answer = ' ';  // Ответ пользователя.
 
    cout << "Загадайте в уме любое целое число от 1 до 100, а я узнаю его всего за 7 простых вопросов :)" << endl;
    cout << "Готовы? (y/n) ";
    cin >> answer;
    cout << endl;
 
    // Высчитываем правильное число.
    for (int i = 1; i <= 7; i++) {
 
        middle = (lower + upper) / 2;                   // Определение середины диапазона чисел.
 
        cout << "Ваше число больше " << middle << "? (y/n) ";
        cin >> answer;
 
        if (answer == 'y') {
            lower = middle;                             // Присваиваем новую нижнею границу диапазона чисел.
        } 
        else if (answer == 'n') {
            upper = middle;                             // Присваиваем новую верхнею границу диапазона чисел.
            if (middle < trueNum) trueNum = middle;     // Определяем правильное число.
        }
    }
 
    // Вывод в консоль правильного числа.
    cout << endl << "Ваше число " << trueNum << " верно? (y/n) ";
    cin >> answer;
 
    if (answer == 'y') {
        cout << endl << "Ура!!!  Я красавчик )))" << endl;
    }
    else if (answer == 'y') {
        cout << endl << "Ну нееет, как такое ВООБЩЕ возможно :(" << endl;
    }
    cout << endl << "Введите любой символ, чтобы выйти... ";
    cin >> answer;
 
    return 0;
}
Мне стало интересно, взглянуть на решения задачек из книги Страуструпа другими читателями и сравнить их со своими.
Поэтому вот мой вариант решения одной из них, может кому-то также интересно по сравнивать.

PS. Вариант решения от talis не верно угадывает число. Есть доля сомнения что это не так и я просто, что то не понял, потому-что я только начал изучать С++ и могу в чем то ошибаться, но мои числа он не отгадывает :)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.04.2017, 15:53     Программа, угадывающая число
Еще ссылки по теме:

Программа угадай число - C++
Игра «Угадай число». Программа загадывает число в диапазоне от 1 до 500 через random. Пользователь пытается его угадать. После каждой...

программа четырехзначное число - C++
Программу в C++ Дано четырехзначное число х. Нужно вывести на экран сообщение о том, сколько в этом числе одинаковых цифр и каково их...

Программа выводит лишнее число - C++
Текст задачи: В двух словах о проблеме: По идее в первую строку выходного файла OUTPUT.TXT нужно вывести числа, которые соответствуют...

Б.Страуструп. Программа угадай число! - C++
Доброго времени суток. Помогите пожалуйста. Я видел пару решений , вот например одно из них : #include &lt;iostream&gt; using...

Почему программа не выводит число? - C++
Работаю на visual studio 2010 Программа выводит пустую консоль. В чем дело, помогите пожалуйста.

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
xstf
0 / 0 / 0
Регистрация: 05.04.2017
Сообщений: 6
13.04.2017, 15:53     Программа, угадывающая число #4
получится правильно хоть там в условии (upper + middle ) /2 дает ответ типа : double , переменная middle объявлена как int - целое, что приведет к ответу 101:2 = 50 , а не 50.5 сужение типов , что - то в этом духе в общем XD
Yandex
Объявления
13.04.2017, 15:53     Программа, угадывающая число
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru