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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.92
andrejap
13 / 13 / 1
Регистрация: 21.04.2013
Сообщений: 245
#1

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

26.04.2013, 15:54. Просмотров 1696. Ответов 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;
        }
 
    }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.04.2013, 15:54     Компьютер угадывает число. Задача решена, как считаете? (вектор и цикл)
Посмотрите здесь:
Компьютер угадывает число C++
Задача на Timus Online Judge, C++. Решена, но C++
C++ Задача решена, но программа не работает с большими значениями
C++ Элементы заданного массива расположить в обратном порядке. Правильно ли решена задача?
C++ Игра в крестики нолики, задача почти решена но результат не выводится на экран
C++ Решение СЛАУ методом простых итераций, задача решена, только написать код осталось
C++ Как вы считаете книга по С++ нормальная
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
lemegeton
2923 / 1352 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
26.04.2013, 16:05     Компьютер угадывает число. Задача решена, как считаете? (вектор и цикл) #2
Цитата Сообщение от andrejap Посмотреть сообщение
Можно ли решать задачу решенной?
Нельзя.

Какие ограничения на значения загаданного числа?
andrejap
13 / 13 / 1
Регистрация: 21.04.2013
Сообщений: 245
26.04.2013, 16:10  [ТС]     Компьютер угадывает число. Задача решена, как считаете? (вектор и цикл) #3
"Считать решенной" имел ввиду.
Ограничения - от 0 до 100 включительно - его диапазон значений.
-=ЮрА=-
Заблокирован
Автор FAQ
26.04.2013, 16:14     Компьютер угадывает число. Задача решена, как считаете? (вектор и цикл) #4
Цитата Сообщение от andrejap Посмотреть сообщение
Компьютер должен угадать задуманное пользователем число с 7-ми попыток.
- м.б игрок должен угадать задуманное компьютером число?
Код плох, хотел бы услышать нормальное задание
ValeryS
Модератор
6550 / 5016 / 463
Регистрация: 14.02.2011
Сообщений: 16,730
26.04.2013, 16:16     Компьютер угадывает число. Задача решена, как считаете? (вектор и цикл) #5
при двоичном поиске 7 попыток хватит всегда
2 в 7 =128
что у тебя за числа в op?
andrejap
13 / 13 / 1
Регистрация: 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/Двоичный_поиск
-=ЮрА=-
Заблокирован
Автор 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;
}
Миниатюры
Компьютер угадывает число. Задача решена, как считаете? (вектор и цикл)  
-=ЮрА=-
26.04.2013, 16:26
  #8

Не по теме:

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

-=ЮрА=-
Заблокирован
Автор 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;
}
Миниатюры
Компьютер угадывает число. Задача решена, как считаете? (вектор и цикл)  
andrejap
13 / 13 / 1
Регистрация: 21.04.2013
Сообщений: 245
26.04.2013, 16:38  [ТС]     Компьютер угадывает число. Задача решена, как считаете? (вектор и цикл) #10
Для интереса запустил первую, но компилятор вот что говорит по поводу рандомных функций:

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

А что делает функция srand?
-=ЮрА=-
Заблокирован
Автор FAQ
26.04.2013, 16:43     Компьютер угадывает число. Задача решена, как считаете? (вектор и цикл) #11
Цитата Сообщение от andrejap Посмотреть сообщение
upd
А, ну так все равно не запустится.))
- допиши в хедеры #include <cstdlib>
MrGluck
Модератор
Эксперт CЭксперт С++
7162 / 4328 / 632
Регистрация: 29.11.2010
Сообщений: 11,750
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";
        }
    }
}
-=ЮрА=-
26.04.2013, 16:44
  #13

Не по теме:

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

andrejap
13 / 13 / 1
Регистрация: 21.04.2013
Сообщений: 245
26.04.2013, 16:51  [ТС]     Компьютер угадывает число. Задача решена, как считаете? (вектор и цикл) #14
Юра, или я не разобрался или Ваша программа просто угадывает, а она должна логически найти верное, загаданное юзером, значение.
-=ЮрА=-
Заблокирован
Автор FAQ
26.04.2013, 16:54     Компьютер угадывает число. Задача решена, как считаете? (вектор и цикл) #15
andrejap, я изначально не понял задание, тебе надо чтобы игра спраивала больше меньше?
MrGluck
Модератор
Эксперт CЭксперт С++
7162 / 4328 / 632
Регистрация: 29.11.2010
Сообщений: 11,750
26.04.2013, 16:56     Компьютер угадывает число. Задача решена, как считаете? (вектор и цикл) #16
andrejap, если вы в моем коде не сможете добавить строчку
C++
1
std::cout >> r;
в нужное место, то я даже не знаю, что еще посоветовать.
andrejap
13 / 13 / 1
Регистрация: 21.04.2013
Сообщений: 245
26.04.2013, 16:57  [ТС]     Компьютер угадывает число. Задача решена, как считаете? (вектор и цикл) #17
А вот программа ув. мистера Глюка вообще сама завершается. )

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

Не по теме:

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

ValeryS
Модератор
6550 / 5016 / 463
Регистрация: 14.02.2011
Сообщений: 16,730
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
необходимо немножко подправить
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.04.2013, 17:05     Компьютер угадывает число. Задача решена, как считаете? (вектор и цикл)
Еще ссылки по теме:
C++ Задача решена только нужна "нитра" фишки по ускорению
Как вы считаете скакой книги начать читать стоит? C++
Как правильно записать число в вектор, который состоит из векторов? C++
Вектор классов. Число конструкторов элементов меньше числа деструкторов. Как так ? C++
Дано натуральное число n и действительное число а, найти, используя цикл C++

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

Или воспользуйтесь поиском по форуму:
andrejap
13 / 13 / 1
Регистрация: 21.04.2013
Сообщений: 245
26.04.2013, 17:05  [ТС]     Компьютер угадывает число. Задача решена, как считаете? (вектор и цикл) #20
А, мистер, понятно - компьютер сам угадывает самого себя.
Мне вот только это не ясным осталось.
srand(time(0)) - что такое time(0)?

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

Не по теме:

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

Yandex
Объявления
26.04.2013, 17:05     Компьютер угадывает число. Задача решена, как считаете? (вектор и цикл)
Ответ Создать тему
Опции темы

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