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

Угадайка от Страуструпа - C++

Восстановить пароль Регистрация
 
cin_cout
25 / 25 / 7
Регистрация: 06.10.2012
Сообщений: 114
17.10.2012, 15:24     Угадайка от Страуструпа #1
Писал, писал, устал. В логике ошибок нет. Как алгоритм оптимизировать и спагетти свернуть?

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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#include "std_lib_facilities.h"
 
int main () {
    
    cout << " Загадайте целое число от 1 до 100 " << " На вопрос можно ответить y или n " << '\n', '\n';
    cout << " Ваше число меньше или равно 50, y или n? " << '\n';
    char choice, choice1, choice2, choice3, choice4, choice5, choice6, choice7, choice8, choice9, choice10, choice11, choice12, choice13, choice14, choice15, choice16, choice17, choice18, choice19;
        do {
    
    cin >> choice; // первый шаг - меньше или больше 50 
            if (choice=='y') {  // 1<=50
        cout << " Ваше число меньше или равно 25? y или n: " << '\n';   
        cin >> choice1;
                if (choice1=='y'){ //  1<=25 
                cout << " Ваше число меньше или равно 12? y или n: " << '\n';
                cin >> choice3;}
                    if (choice3=='y') { // 1<=12
                        cout << " Ваше число меньше 7? y/n " << '\n';
                        cin >> choice5;}
                    if (choice3=='n') { // 13<=25 
                        cout << " Ваше число меньше 19? y/n " << '\n';
                        cin >> choice7;}
                        if (choice5=='y'){ // 1<7 
                            cout << " Ваше число меньше 4? y/n " << '\n';
                            cin >> choice9;
                            }
                        if (choice5=='n'){ // 7<=12
                            cout << " Ваше число меньше 10? y/n " << '\n';
                            cin >> choice11;
                            }
                            if (choice7=='y'){ // 13<19
                                cout << " Ваше число меньше 15? y/n " << '\n';
                                cin >> choice13;
                            }
                            if (choice7=='n'){ // 19<=25
                                cout << " Ваше число меньше 22? y/n " << '\n';
                                cin >> choice15;
                            }
                if (choice9=='y'){ // 1<4 то есть 1, 2, 3 
                    cout << " Ваше число меньше 3? y/n " << '\n';
                    cin >> choice17;
                }
                if (choice17=='y') { // число меньше 3, то есть или 1, или 2 - на последнем этапе обуяла лень 
                    cout << " Ваше число 1 или 2 " << '\n';
                }
                    if (choice17=='n') { // число ==3 
                        cout << " Загаданное число = 3 " << '\n';
                    }
                if (choice9=='n'){ // 4<7 то есть 4, 5, 6
                    cout << " Ваше число меньше 6? y/n " << '\n';
                    cin >> choice19;
                }
                if (choice19=='y'){ // число меньше 6, то есть 4 или 5 
                    cout << " Ваше число 4 или 5 " << '\n';
                }
                if (choice19=='n'){ // число == 6 
                    cout << " Загаданное число = 6 " << '\n';
                }
                
                /* Дальше те же макароны, что и по первой ветке сравнений. 
                 Нужно всё это в стройный алгоритм запихнуть. 
                 */
                if (choice1=='n'){ // 26<=50  
                    cout << " Ваше число меньше 38? y или n: " << '\n';
                cin >> choice5;}
            }
            if (choice=='n') { // 51<=100 
        cout << " Ваше число меньше или равно 75? y или n: " << '\n';  
        cin >> choice2;
                if (choice2=='y'){ // 51<=75
                    cout << " Число меньше или равно 63? y/n " << '\n';
                cin >> choice4;}
                if (choice2=='n'){ // 76<=100
                        cout << " Число меньше или равно 88? y/n " << '\n';
                cin >> choice6;}
            }
                    else cout << " Для выхода из программы нажмите q " << '\n';
            
    } while (choice!='q');
    
        
    
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.10.2012, 15:24     Угадайка от Страуструпа
Посмотрите здесь:

C++ Какая книга Страуструпа
задачки Страуструпа C++
C++ Калькулятор в книге Страуструпа
C++ Задание из книги Страуструпа
Калькулятор страуструпа C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11818 / 6797 / 769
Регистрация: 27.09.2012
Сообщений: 16,870
Записей в блоге: 2
Завершенные тесты: 1
17.10.2012, 15:41     Угадайка от Страуструпа #2
Ошибка в коде игры-угадайки
агерон
 Аватар для агерон
265 / 264 / 33
Регистрация: 12.10.2009
Сообщений: 1,030
17.10.2012, 15:54     Угадайка от Страуструпа #3
рекурсия, и деление отрезка по полам, вот твое спасение
igorrr37
 Аватар для igorrr37
1593 / 1221 / 118
Регистрация: 21.12.2010
Сообщений: 1,868
Записей в блоге: 7
17.10.2012, 16:23     Угадайка от Страуструпа #4
возможно что то такое имелось ввиду
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <cctype>
 
int main()
{
    setlocale(LC_ALL, "Russian");
    size_t beg = 1, end = 100, middle;
    char canswer;
    std::cout << " Загадайте целое число от " << beg << " до " << end << ". На вопрос можно ответить y или n " << std::endl;
    while(beg != end)
    {
        std::cout << " Ваше число меньше или равно " << (middle = beg + (end - beg) / 2) << ", y или n? " << '\n';
        (std::cin >> canswer).sync();
        'y' == tolower(canswer) ? end = middle : beg = middle + 1;
    }
    std::cout << "ваше число " << beg << std::endl;
    return 0;
}
Yandex
Объявления
17.10.2012, 16:23     Угадайка от Страуструпа
Ответ Создать тему
Опции темы

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