Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 22, средняя оценка - 4.91
илья1995
3 / 3 / 1
Регистрация: 17.10.2011
Сообщений: 169
#1

Игра быки и коровы - C++

13.01.2013, 23:03. Просмотров 3547. Ответов 7
Метки нет (Все метки)

Условия игры: компьютер генерирует целое четырехзначное число, в котором все цифры раз-личны. Играющий пытается угадать это число, делая несколько попыток. После каждой попытки компьютер сообщает о количестве <<коров>> (цифр, совпадающих по разряду с цифрой в зага-данном числе) и <<быков>> (цифр, имеющихся в загаданном числе, но не совпадающих по раз-ряду)
поиском по форуму пользовался. тем много но решения ни в одной можно сказать не найдено. помогите решить простеньким алгоритмом. если кто решал такое уже можете скинуть ваши варианты
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.01.2013, 23:03
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Игра быки и коровы (C++):

Игра: Быки и Коровы - C++
Всем привет! Нужно написать игру &quot;Быки и коровы&quot;, но без массива :) Я справился с поставленной задачей, но есть баг... Если компьютер...

Быки и коровы - C++
1. В чём разница между структурой и классом, зачем использовать структуру? 2. Зачем нужны структуры pair и four? 3. Что такое inline и...

Быки и коровы - C++
Есть такая задача быки о коровы. Условие: http://********/?main=task&amp;id_task=13. Код моего решения: #include &lt;fstream&gt; #include...

Быки и коровы - C++
Решил написать игру Быки и коровы, но уже в самом начале появились проблемы. я сделал функцию, которая считает количество быков, т.е....

Быки и коровы. Комментарии к коду. - C++
Нужно прокомментировать программу на языке с++ Игра Быки и Коровы. Чем подробнее тем лучше. Заранее спасибо! #include &quot;stdafx.h&quot; ...

Быки и коровы, не правильно считает их - C++
Не правильно считает быков и коров, помогите пожалуйста #include &lt;iostream&gt; #include &lt;locale.h&gt; #include &lt;cstdlib&gt; // rand() ...

7
Croessmah
Ушел
Эксперт CЭксперт С++
13557 / 7707 / 872
Регистрация: 27.09.2012
Сообщений: 18,996
Записей в блоге: 3
Завершенные тесты: 1
13.01.2013, 23:10 #2
Быки и коровы
Быки и коровы
Быки и коровы. Комментарии к коду.
0
илья1995
3 / 3 / 1
Регистрация: 17.10.2011
Сообщений: 169
13.01.2013, 23:22  [ТС] #3
1)программа не совсем быки и коровы она генирирует числои в конечном итоге выводит загаданное число и число а как таковых быков и коров невыводит
2)сдесь постебались над кодом и 3) решения так и не найдено эти темы я уже изучал
0
UserAK
73 / 73 / 4
Регистрация: 25.12.2012
Сообщений: 189
Записей в блоге: 2
14.01.2013, 06:36 #4
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
85
86
87
88
89
#include <iostream>
#include <conio.h>
#include <time.h>
 
void GetRandomNumber(char *, const unsigned &);
bool CheckAnswer(const char *, const char *, const unsigned &, unsigned &, unsigned &);
 
int main()
{
    using namespace std;
    const unsigned n_size(4), max_attempts(40);
    char secret_number[n_size+1], user_number[n_size+1];
    unsigned attempts(0), bulls(0), cows(0), difficulty(0), score(0);
    int key(0);
    bool GameOver(false);
 
    while(!GameOver){
        memset(secret_number,'\0',n_size+1);
        GetRandomNumber(secret_number, n_size);
        system("cls");
        cout<<"  A shepherd has a riddle for you, how many cattle in the herd?"<<endl;
        cout<<"  Answer contains 4 digits 1-9 without repetition."<<endl;
        cout<<"  If you see the bulls, then the answer contains your digits."<<endl;
        cout<<"  But if you see a cows, it mean that some digits in its place."<<endl;
        cout<<"  How many attempts you need that would guess? ("<<max_attempts<<" maximum) : ";
        cin>>attempts;
        cout<<endl;
        if(attempts > max_attempts) attempts = max_attempts;
        difficulty = max_attempts/attempts;
        score = max_attempts;
 
        while(attempts){
            cout<<"  You have "<<attempts<<" attempts"<<endl;
            cout<<"  What is the number? : ";
            memset(user_number,'\0',n_size+1);
            cin>>user_number;
            if(CheckAnswer(secret_number, user_number, n_size, cows, bulls)){
                cout<<"  It's true!"<<endl;
                score *= difficulty;
                cout<<"  Congratulations! Your score : "<<score<<endl<<endl; 
                break;
            }else{
                cout<<"  Not quite right. And you see "<<bulls<<" bulls and "<<cows<<" cows."<<endl;
                score--;
                attempts--;
            }
        }
        cout<<"  In a herd of cattle "<<secret_number<<endl;
        cout<<"  \tPlay again? (y/ESC)";
        do{
            int key = _getch();
            if(key == 'Y' || key == 'y') key = 0;
            else if(key == 27){
                GameOver = true;
                key = 0;
            }
        }while(key);
    }
 
    cout<<endl;
    system("pause");
    return 0;
}
 
void GetRandomNumber(char *num, const unsigned &size)
{
    char digits[10] = "123456789";
    srand((unsigned)time(0));
    for(unsigned i=0, rmax=9; i<size; i++){
        unsigned r = rand()%rmax--;
        num[i] = digits[r];
        digits[r] = digits[rmax];
    }
}
 
bool CheckAnswer(const char *secret, const char *answer, const unsigned &size, unsigned &cow, unsigned &bull)
{
    cow = 0; bull = 0;
    unsigned i1, i2;
    for(i1=0; i1<size; i1++){
        for(i2=0; i2<size; i2++){
            if(answer[i1] == secret[i2]){
                if(i1 == i2) cow++;
                else bull++;
            }
        }
    }
    return cow == size;
}
0
илья1995
3 / 3 / 1
Регистрация: 17.10.2011
Сообщений: 169
15.01.2013, 12:57  [ТС] #5
выше приведенные коды слишком наворочены для лабораторной. можете подсказать 2 цикла сравнения двух массивов на быков и коров ?
тоже самое было с игрой кости поискал на форуме все коды огромные и в итоге написал свой простенький.
мне нужна обычная программа с 2 массивами(массив из 4 символов). первый генерируется случайно второй вводит пользователь. и 2 функции поиск быков и поиск коров .
0
UserAK
73 / 73 / 4
Регистрация: 25.12.2012
Сообщений: 189
Записей в блоге: 2
15.01.2013, 14:41 #6
мм.... функция сравнения проще некуда, формирование случайного 4-х значного числа тоже коротенькая. выкинте текст и ничего не останется от "навороченности"

Добавлено через 7 минут
Цитата Сообщение от илья1995 Посмотреть сообщение
и 2 функции поиск быков и поиск коров .
зачем 2? за один раз всё ищется - если цифра есть в загаданном числе - 2 варианта
если индексы совпадают значит корова++ иначе - бык++
куда уж проще то?

Добавлено через 38 минут
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 <iostream>
#include <time.h>
 
void GetRandomNumber(char *num)
{
    char digits[10] = "123456789";
    srand((unsigned)time(0));
    for(unsigned i=0, rmax=9; i<4; i++){
        unsigned r = rand()%rmax--;
        num[i] = digits[r];
        digits[r] = digits[rmax];
    }
}
 
template <int row, int col>
bool CheckAnswer(char (&arr)[row][col], unsigned &bull, unsigned &cow)
{
    cow = 0; bull = 0;
    unsigned i1, i2;
    for(i1=0; i1<col-1; i1++){
        for(i2=0; i2<col-1; i2++){
            if(arr[0][i1] == arr[1][i2]){
                if(i1 == i2) cow++;
                else bull++;
            }
        }
    }
    return cow == col-1;
}
 
int main()
{
    using namespace std;
    char numbers[2][5];
    unsigned bulls(0), cows(0);
 
    memset(numbers[0],'\0',5);
    GetRandomNumber(numbers[0]);
 
    while(true){
        cout<<"  What is the number? : ";
        memset(numbers[1],'\0',5);
        cin>>numbers[1];
        if(CheckAnswer(numbers, bulls, cows)){
            cout<<"  Congratulations! Your win : "<<endl;
            system("pause");
            return 0;
        }else{
            cout<<bulls<<" bulls "<<cows<<" cows"<<endl;
        }
    }
    return 0;
}
Добавлено через 1 минуту
вот поурезал слегка

Добавлено через 7 минут
Цитата Сообщение от илья1995 Посмотреть сообщение
массив из 4 символов
из 5 символов лучше (4 символа и '\0'), тогда можно проще вводить с консоли и выводить на экран
1
илья1995
3 / 3 / 1
Регистрация: 17.10.2011
Сообщений: 169
15.01.2013, 21:20  [ТС] #7
можете пояснить программу?
конкретно вот эти строки:
C++
1
2
3
4
5
char digits[10] = "123456789";
        for(unsigned i=0, rmax=9; i<4; i++){
        unsigned r = rand()%rmax--;
        num[i] = digits[r];
        digits[r] = digits[rmax];
не совсем понял как тут заполняется массив понял только что рандомом и 4 числа
C++
1
template <int row, int col>
C++
1
unsigned bulls(0), cows(0);
C++
1
memset(numbers[0],'\0',5);
C++
1
CheckAnswer(numbers, bulls, cows)
тут вроде как вызвывается функция с быками и коровами но зачем запись в скобках (numbers, bulls, cows)
просто до этого такова не встречал еще
и где тут массив который вводит пользователь?
0
UserAK
73 / 73 / 4
Регистрация: 25.12.2012
Сообщений: 189
Записей в блоге: 2
16.01.2013, 03:44 #8
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
    // массив символов, которые будут выбираться случайным образом
    // напоминает лото
    char digits[10] = "123456789";
 
    // инициализация генератора случайных чисел
    srand((unsigned)time(0));
 
    // заполнение 4-х символьной строки, переданной в функцию
    for(unsigned i=0, rmax=9; i<4; i++){
                                    // 1-я итерация i=0
                                    // rmax = 9
        unsigned r = rand()%rmax;   // r случайное от 0 до 8
                                    // допустим r = 2
                                    // num 0000     digits 123456789
        num[i] = digits[r];         // num 3000
                                    // теперь символ с индексом 2 уже нельзя использовать
                                    // заменим его последним символом (с инексом rmax)
        digits[r] = digits[rmax];   // теперь digits 129456789
        rmax--;                     // уменьшаем индекс максимальной цифры
                                    // т.е. в след. раз выбирать будем из 12945678
    }
1
16.01.2013, 03:44
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.01.2013, 03:44
Привет! Вот еще темы с ответами:

Задача про вектор для игры "Быки и коровы" - C++
Задача из книги Страуструпа, вот условие : программа должна хранить вектор из четырех различных чисел в диапазоне от 0 до 9 (т.е.,...

Функция для игры "быки и коровы" - C++
Помогите составить код для С++, для раздела Функции. сама задача Компьютер задумывает четырехзначное число, не содержащее двух...

Ошибка в коде игры "Быки и коровы" - C++
#include &lt;iostream&gt; #include &quot;Game.h&quot; using namespace std; Game::Game() { com; per; } Game:: ~Game() { delete per; ...

Алгоритм игры "Быки и коровы" - C++
Игра &quot;Быки и коровы&quot;. Вы загадываете пятизначное число. Программа дает Вам другое четырехзначное число. Вы отвечаете, сколько цифр в числах...


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

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

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