Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
andrejap
13 / 13 / 7
Регистрация: 21.04.2013
Сообщений: 245
1

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

26.04.2013, 15:54. Просмотров 2038. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.04.2013, 15:54
Ответы с готовыми решениями:

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

Верно ли решена данная задача
Задача: Напишите программу. считывающую цифры и составляющую из них целые...

Задача на Timus Online Judge, C++. Решена, но
Решил задачу, но выдает ошибку WA на 2 тесте. Не могу даже представить, в чем...

Задача решена, но программа не работает с большими значениями
Пусть An = sin(1–sin(2+sin(3–sin(4+…sin(n))…) Обозначим Sn =...

Элементы заданного массива расположить в обратном порядке. Правильно ли решена задача?
В общем задача такая : элементы заданного массива T(k) расположить в обратном...

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

Какие ограничения на значения загаданного числа?
0
andrejap
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
ValeryS
Модератор
7317 / 5559 / 704
Регистрация: 14.02.2011
Сообщений: 18,854
26.04.2013, 16:16 5
при двоичном поиске 7 попыток хватит всегда
2 в 7 =128
что у тебя за числа в op?
0
andrejap
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
Миниатюры
Компьютер угадывает число. Задача решена, как считаете? (вектор и цикл)  
andrejap
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
MrGluck
Модератор
Эксперт CЭксперт С++
8102 / 4953 / 1436
Регистрация: 29.11.2010
Сообщений: 13,439
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
andrejap
13 / 13 / 7
Регистрация: 21.04.2013
Сообщений: 245
26.04.2013, 16:51  [ТС] 14
Юра, или я не разобрался или Ваша программа просто угадывает, а она должна логически найти верное, загаданное юзером, значение.
0
-=ЮрА=-
Заблокирован
Автор FAQ
26.04.2013, 16:54 15
andrejap, я изначально не понял задание, тебе надо чтобы игра спраивала больше меньше?
0
MrGluck
Модератор
Эксперт CЭксперт С++
8102 / 4953 / 1436
Регистрация: 29.11.2010
Сообщений: 13,439
26.04.2013, 16:56 16
andrejap, если вы в моем коде не сможете добавить строчку
C++
1
std::cout >> r;
в нужное место, то я даже не знаю, что еще посоветовать.
0
andrejap
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
ValeryS
Модератор
7317 / 5559 / 704
Регистрация: 14.02.2011
Сообщений: 18,854
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
andrejap
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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.04.2013, 17:05

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

Решение СЛАУ методом простых итераций, задача решена, только написать код осталось
решить СЛАУ с точностью е=10 в степени(-4) 4*x1-x2-x3=2 x1+5*x2-2*x3=4 ...

Как вы считаете книга по С++ нормальная
Б. Страуструп - &quot;Программирование: принципы и практика использования C++


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

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