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

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

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

Author24 — интернет-сервис помощи студентам
Компьютер должен угадать задуманное пользователем число с 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.04.2013, 15:54
Ответы с готовыми решениями:

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

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

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

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

22
4773 / 2582 / 894
Регистрация: 29.11.2010
Сообщений: 5,590
26.04.2013, 16:05 2
Цитата Сообщение от andrejap Посмотреть сообщение
Можно ли решать задачу решенной?
Нельзя.

Какие ограничения на значения загаданного числа?
0
13 / 13 / 7
Регистрация: 21.04.2013
Сообщений: 245
26.04.2013, 16:10  [ТС] 3
"Считать решенной" имел ввиду.
Ограничения - от 0 до 100 включительно - его диапазон значений.
0
Заблокирован
Автор FAQ
26.04.2013, 16:14 4
Цитата Сообщение от andrejap Посмотреть сообщение
Компьютер должен угадать задуманное пользователем число с 7-ми попыток.
- м.б игрок должен угадать задуманное компьютером число?
Код плох, хотел бы услышать нормальное задание
0
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,521
26.04.2013, 16:16 5
при двоичном поиске 7 попыток хватит всегда
2 в 7 =128
что у тебя за числа в op?
0
13 / 13 / 7
Регистрация: 21.04.2013
Сообщений: 245
26.04.2013, 16:22  [ТС] 6
Именно компьютер должен угадать число с не более 7 попыток. Число должно быть от 0 до 100.
Это задача с учебника Б. Страуструпа.
Правда, он предлагает решить с помощью if-else, но мне захотелось код короче.

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

//Ага, понял: ru.wikipedia.org/wiki/Двоичный_поиск
0
Заблокирован
Автор FAQ
26.04.2013, 16:25 7
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
  #8

Не по теме:

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

0
Заблокирован
Автор FAQ
26.04.2013, 16:32 9
Тогда так, копьютер спрашивает верно ли он выдал число (в варианте на скриншоте я загадал 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  [ТС] 10
Для интереса запустил первую, но компилятор вот что говорит по поводу рандомных функций:

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

А что делает функция srand?
0
Заблокирован
Автор FAQ
26.04.2013, 16:43 11
Цитата Сообщение от andrejap Посмотреть сообщение
upd
А, ну так все равно не запустится.))
- допиши в хедеры #include <cstdlib>
0
Форумчанин
Эксперт CЭксперт С++
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
26.04.2013, 16:44 12
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
  #13

Не по теме:

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

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

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

Не по теме:

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

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

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  [ТС] 20
А, мистер, понятно - компьютер сам угадывает самого себя.
Мне вот только это не ясным осталось.
srand(time(0)) - что такое time(0)?

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

Не по теме:

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

0
26.04.2013, 17:05
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.04.2013, 17:05
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru