Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.52/25: Рейтинг темы: голосов - 25, средняя оценка - 4.52
13 / 13 / 7
Регистрация: 21.04.2013
Сообщений: 245

Компьютер угадывает число. Задача решена, как считаете? (вектор и цикл)

26.04.2013, 15:54. Показов 5305. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Компьютер должен угадать задуманное пользователем число с 7-ми попыток.
Хотел написать с использованием циклов, а не просто перебором if-else. Но не всегда получается, как я смотрю.

Есть ли какое математическое решение для правильного выбора слагаемых
C++
1
op[i]
при проверке в цикле, а то не всегда 7 раз хватает?
Можно ли решать задачу решенной?

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
    vector<int> op(7);
            op[0]=25;
            op[1]=21;
            op[2]=17;
            op[3]=13;
            op[4]=9;
            op[5]=5;
            op[6]=1;
    int nv=50;
    char ans='a';
    for (unsigned int i=0;i<op.size();++i)
    {
        cout<<"Is value bigger/smaller than "<<nv<<" or equal?\n";
        cin>>ans;
        switch (ans)
        {
            case 'b':
            nv+=op[i];
            break;
            case 's':
            nv-=op[i];
            break;
            case 'e':
            cout<<"Your number is - "<<nv<<'.';
            break;
            default:
            cout<<"Pls enter correst answer";
            --i;
            break;
        }
 
    }
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
26.04.2013, 15:54
Ответы с готовыми решениями:

Компьютер угадывает число
Пользователь загадывает число от 1 до 100 и компьютер пытается угадать. На каждую попытку компьютера пользователь отвечает, больше (h)...

Написать программу, в которой задается число, а компьютер его угадывает
помогите пожалуйста, написать программу, в которой я задаю число, а компьютер угадывает это число. количество попыток ограничено ?

Напишите программу "Угадай число", но здесь компьютер угадывает ваше число
Напишите программу &quot;Угадай число&quot;, но здесь компьютер угадывает ваше число. Желательно, чтобы в выводе писали, сколько попыток потратил...

22
 Аватар для lemegeton
4903 / 2696 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
26.04.2013, 16:05
Цитата Сообщение от andrejap Посмотреть сообщение
Можно ли решать задачу решенной?
Нельзя.

Какие ограничения на значения загаданного числа?
0
13 / 13 / 7
Регистрация: 21.04.2013
Сообщений: 245
26.04.2013, 16:10  [ТС]
"Считать решенной" имел ввиду.
Ограничения - от 0 до 100 включительно - его диапазон значений.
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
26.04.2013, 16:14
Цитата Сообщение от andrejap Посмотреть сообщение
Компьютер должен угадать задуманное пользователем число с 7-ми попыток.
- м.б игрок должен угадать задуманное компьютером число?
Код плох, хотел бы услышать нормальное задание
0
Модератор
Эксперт по электронике
8979 / 6745 / 921
Регистрация: 14.02.2011
Сообщений: 23,863
26.04.2013, 16:16
при двоичном поиске 7 попыток хватит всегда
2 в 7 =128
что у тебя за числа в op?
0
13 / 13 / 7
Регистрация: 21.04.2013
Сообщений: 245
26.04.2013, 16:22  [ТС]
Именно компьютер должен угадать число с не более 7 попыток. Число должно быть от 0 до 100.
Это задача с учебника Б. Страуструпа.
Правда, он предлагает решить с помощью if-else, но мне захотелось код короче.

Добавлено через 1 минуту
Цитата Сообщение от ValeryS Посмотреть сообщение
при двоичном поиске 7 попыток хватит всегда
2 в 7 =128
что у тебя за числа в op?
в листинге же есть.
То есть 2^7 это и есть пруф?

//Ага, понял: ru.wikipedia.org/wiki/Двоичный_поиск
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
26.04.2013, 16:25
andrejap, ниже игра с комьютером "Угадай число", всё в цикле, число попыток можно задавать (параметр nTry) в функции Play
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
#include <ctime>
#include <iostream>
using namespace std;
 
bool Play(int nTry);
 
int main()
{
    int iChoise= 0;
    bool bWork = true;
    srand(time(0));
    while( bWork )
    {
        cout<<"1 - PLAY"<<endl;
        cout<<"0 - EXIT"<<endl;
        cout<<"CHOISE : ";cin>>iChoise;
        switch( iChoise )
        {
        case 1 :
            if(Play(7))
                cout<<"PRIZE YOUR WIN!!!"<<endl;
            else
                cout<<"COMPUTER WIN =P"<<endl;
            break;
        case 0 :
            bWork = false;
            break;
        default:
            cout<<"Entered unsupported key"<<endl;
            break;
        }
 
    }
    return 0;
}
 
bool Play(int nTry)
{
    int number = rand() % 100;
    int answer = -1;
    bool bWin  = false;
    for(int iTry = 0; iTry < nTry && !bWin; iTry++)
    {
        cout<<"TRY : "<<iTry + 1<<" / "<<nTry<<endl; 
        cout<<"YOUR NUMBER : ";cin>>answer;
        bWin = answer == number;
        if(bWin)
            cout<<"CORRECT ANSWER"<<endl;
        else
            cout<<"INCORRECT ANSWER"<<endl;
    }
    return bWin;
}
Миниатюры
Компьютер угадывает число. Задача решена, как считаете? (вектор и цикл)  
1
26.04.2013, 16:26

Не по теме:

Цитата Сообщение от andrejap Посмотреть сообщение
Именно компьютер должен угадать число с не более 7 попыток.
- ну ок щас переделаем

0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
26.04.2013, 16:32
Тогда так, копьютер спрашивает верно ли он выдал число (в варианте на скриншоте я загадал 5), можно ввести ввод загаднного пользователм числа и сравнивать с тем что генит алгоритм, короче просто дорабоать под свои нужды. Ни векторов ни каких либо спешл приёмов данное задание не требует
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
#include <ctime>
#include <iostream>
using namespace std;
 
bool Play(int nTry);
 
int main()
{
    int iChoise= 0;
    bool bWork = true;
    srand(time(0));
    while( bWork )
    {
        cout<<"1 - PLAY"<<endl;
        cout<<"0 - EXIT"<<endl;
        cout<<"CHOISE : ";cin>>iChoise;
        switch( iChoise )
        {
        case 1 :
            if(Play(7))
                cout<<"COMPUTER WIN =P"<<endl;
            else
                cout<<"PRIZE YOUR WIN!!!"<<endl;
            break;
        case 0 :
            bWork = false;
            break;
        default:
            cout<<"Entered unsupported key"<<endl;
            break;
        }
 
    }
    return 0;
}
 
bool Play(int nTry)
{
    bool bWin  = false;
    int answer = 0;
    for(int iTry = 0; iTry < nTry && !bWin; iTry++)
    {
        cout<<"TRY : "<<iTry + 1<<" / "<<nTry<<endl; 
        cout<<"IS NUMBER : "<<rand()%100<<" CORRECT?"<<endl;
        cout<<"1 - YES"<<endl;
        cout<<"NO OTHERWISE"<<endl;
        cout<<"YOUR ANSWER : ";cin>>answer;
        bWin = (answer == 1);
        if(bWin)
            cout<<"CORRECT ANSWER"<<endl;
        else
            cout<<"INCORRECT ANSWER"<<endl;
    }
    return bWin;
}
Миниатюры
Компьютер угадывает число. Задача решена, как считаете? (вектор и цикл)  
1
13 / 13 / 7
Регистрация: 21.04.2013
Сообщений: 245
26.04.2013, 16:38  [ТС]
Для интереса запустил первую, но компилятор вот что говорит по поводу рандомных функций:

main.cpp|11|ошибка: нет декларации «srand» в этой области видимости
main.cpp|39|ошибка: нет декларации «rand» в этой области видимости
upd
А, ну так все равно не запустится.))

А что делает функция srand?
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
26.04.2013, 16:43
Цитата Сообщение от andrejap Посмотреть сообщение
upd
А, ну так все равно не запустится.))
- допиши в хедеры #include <cstdlib>
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
26.04.2013, 16:44
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
#include <iostream>
#include <cstdlib>
#include <ctime>
 
int main()
{
    srand(time(0));
    int r = rand() % 101, x = -1, a = 0, b = 100;
    const int maxTry = 7;
    for (int i=0; i < maxTry && x != r; i++)
    {
        if (b == 1) x = 0; // small fix :)
        else x = (a + b) / 2;
        std::cout << "Try " << i + 1 << ": " << x << " ===> ";
        if (x == r)
            std::cout << "yes\nYou win\n";
        else
        {
            if (x > r)
            {
                std::cout << "lower\n";
                b = x;
            }
            else
            {
                std::cout << "higher\n";
                a = x;
            }
            if (i == maxTry - 1)
                std::cout << "You lose\n";
        }
    }
}
0
26.04.2013, 16:44

Не по теме:

Цитата Сообщение от andrejap Посмотреть сообщение
А что делает функция srand?
- устанавливает начальное значение гнератора случ чисел

0
13 / 13 / 7
Регистрация: 21.04.2013
Сообщений: 245
26.04.2013, 16:51  [ТС]
Юра, или я не разобрался или Ваша программа просто угадывает, а она должна логически найти верное, загаданное юзером, значение.
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
26.04.2013, 16:54
andrejap, я изначально не понял задание, тебе надо чтобы игра спраивала больше меньше?
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
26.04.2013, 16:56
andrejap, если вы в моем коде не сможете добавить строчку
C++
1
std::cout >> r;
в нужное место, то я даже не знаю, что еще посоветовать.
0
13 / 13 / 7
Регистрация: 21.04.2013
Сообщений: 245
26.04.2013, 16:57  [ТС]
А вот программа ув. мистера Глюка вообще сама завершается. )

Добавлено через 1 минуту
Цитата Сообщение от MrGluck Посмотреть сообщение
andrejap, если вы в моем коде не сможете добавить строчку
C++
1
std::cout >> r;
в нужное место, то я даже не знаю, что еще посоветовать.
вообще-то не успел разобраться, да
0
26.04.2013, 16:59

Не по теме:

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

0
Модератор
Эксперт по электронике
8979 / 6745 / 921
Регистрация: 14.02.2011
Сообщений: 23,863
26.04.2013, 17:01
вот тебе решение при помощи установки бит
на основе твоего решения

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
int tmp=0,tmp1;
for(int i=7;i>=0;i--)
{
tmp=1<<i;
cout<<"Is value bigger/smaller than "<<tmp+tmp1<<" or equal?\n";
        cin>>ans;
 switch (ans)
        {
            case 'b':
             tmp1+=tmp;
              break;
            case 's':
                break;
            case 'e':
            cout<<"Your number is - "<<tmp+tmp1<<'.';
                return;
            default:
            cout<<"Pls enter correst answer";
                break;
        }
}
не проверял просто идея
есть небольшой недостаток ищет от 1 до 127
необходимо немножко подправить
0
13 / 13 / 7
Регистрация: 21.04.2013
Сообщений: 245
26.04.2013, 17:05  [ТС]
А, мистер, понятно - компьютер сам угадывает самого себя.
Мне вот только это не ясным осталось.
srand(time(0)) - что такое time(0)?

Добавлено через 2 минуты

Не по теме:

Я не благодарный? Мдя :( . Я просто еще не сразу понял, что к чему, ибо еще ничего не понимаю в программировании.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.04.2013, 17:05
Помогаю со студенческими работами здесь

[Цикл] Найти делители числа (задача уже решена, но где-то ошибка)
Вот собственно попробовал решить (нужно решить с помощью while), но видимо где-то ошибка: program repeattowhile1; uses crt; var...

"Угадай Число", где угадывает компьютер
Привет, у меня проблема. По идее, все предельно просто и поиск загаданного числа осуществляется с помощью метода Хартли, но я не могу...

Решена задача(как я полагаю :D), но хочется другое решение
Ввести последовательность S и вывести второй максимум этой последовательности, т. е. элемент a∈S : ∃ b∈S : b&gt;a и...

угадывает число
Здравствуйте уважаемые форумчани! Условие задачи: Составить программу, которая угадывала бы задуманное Вами число в диапазоне от 1 до 512...

Код угадывает число от 0 до 100
Помогите написать код, который бы угадывал число, загаданное пользователем. Я решил эту задачу бинарным способом, но этот способ выглядит...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru