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

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

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

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

08.11.2011, 19:26. Просмотров 2652. Ответов 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     Программа, угадывающая число
Посмотрите здесь:

программа четырехзначное число C++
Программа задумывает число от 1 до 10, и предлагает пользователю отгадать число за 5 попыток C++
C++ Программа на С, которая вводит число типа int с клавиатуры, преобразует ее в строку (str), выводит на дисплей число и строку.
C++ Программа, которая считывает число с клавиатуры и находит ближайшее справа число, которое является квадратом натурального числа
C++ Ведется набор цифр и надо чтобы программа из него сама сообразило число. То есть что бы программа сама раскидывала их по разрядам.
Дано 2-ух-значное число. Сделать так, чтоб программа преобразовала это число в новое число кол-во десятков C++
Программа, которая вводит число из пяти цифр, разделяет число на отдельные цифры C++
C++ Пол-ль вводит число от 50 до 100. Программа раскладывает число на сумму 4-х квадратов, всеми возможными способами
C++ Программа угадай число
C++ Программа выводит лишнее число
Почему программа не выводит число? C++
C++ Вывести N-е полупростое число (программа постоянно выводит число 4; не могу понять в чем ошибка)

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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 не верно угадывает число. Есть доля сомнения что это не так и я просто, что то не понял, потому-что я только начал изучать С++ и могу в чем то ошибаться, но мои числа он не отгадывает :)
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     Программа, угадывающая число
Ответ Создать тему
Опции темы

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