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

C++

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 89, средняя оценка - 4.89
AgreSSa
0 / 0 / 0
Регистрация: 06.10.2008
Сообщений: 2
#1

Алгоритм игры Быки -коровы в С++ - C++

09.10.2008, 21:04. Просмотров 12235. Ответов 22
Метки нет (Все метки)

сложно ли реализовать алгоритм игры Быки -коровы в С++
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.10.2008, 21:04
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Алгоритм игры Быки -коровы в С++ (C++):

Быки и коровы - C++
Доброе время суток. Пользователь загадывает число из 4 цифр, каждая из которых от 1 до 6, причем все цифры различны. Разработать...

Волновой алгоритм поиска (Алгоритм A* / Алгоритм А стар) - C++
Хочу разработать алгоритм для решения головоломки с подвижными дисками (перестановочная головоломка). Определение. Перестано́вочные...

Ищу исходник игры на С++, на подобие "Солитер", "Быки и коровы", "Змейка" и т. д - C++ Builder
Нужен код игры на С++, на подобие "Солитер", "Быки и коровы", "Змейка" и т. д. Или ссылки на исходники, не смогла их...

Игра быки и коровы - C++ Builder
У меня такая проблема, мне надо написать игру Быки и коровы на С++Builder, но ничего не выходит Вот условие:Составить программу,...

Игра быки и коровы - C++ Builder
Привет всем. У меня тут проблема, нужно создать игру быки и коровы на форме с классами, с полиморфизмом, c инкапсуляцией и с...

Составить алгоритм игры нахождения одинаковых соседних картинок - C++ Builder
Здравствуйте! Пытаюсь написать игру, в которой надо убрать парные картинки. По горизонтали и вертикали, а также по бокам убрать...

22
yulesik
0 / 0 / 0
Регистрация: 25.05.2010
Сообщений: 6
25.05.2010, 12:01 #16
taras atavin, а алгоритм, который написан в прошлом посте, объясните не сможете?
0
Somebody
2798 / 1609 / 149
Регистрация: 03.12.2007
Сообщений: 4,204
Завершенные тесты: 3
25.05.2010, 19:05 #17
Не знаю, как в том посте, но могу предложить вариант:
Создаётся массив boolов. Отмечаются "плохие" числа - которые не могут быть загаданы. Спрашивается любое "хорошее" число. Все числа, на которые ответ юзера был бы не таким, помечаются как плохие. И так далее... Если число отгадано - то хорошо, если все оставшиеся числа - плохие, то юзер натупил с ответами.
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
#include <iostream>
#include <cstring>
#include <limits>
 
using namespace std;
 
void Split(int x, int& a, int& b, int& c, int& d)
{
    d = x % 10; x /= 10;
    c = x % 10; x /= 10;
    b = x % 10; x /= 10;
    a = x % 10;
}
 
bool IsValid(int x)
{
    int a, b, c, d;
    Split(x, a, b, c, d);
    return
        (a >= 1) && (a <= 9) &&
        (a != b) && (a != c) && (a != d) && (b != c) && (b != d) && (c != d);
}
 
bool Matches(int n1, int n2, int bulls, int cows)
{
    int a1, b1, c1, d1, a2, b2, c2, d2;
    Split(n1, a1, b1, c1, d1);
    Split(n2, a2, b2, c2, d2);
    return
        bulls == (
            (a1 == a2) + (b1 == b2) + (c1 == c2) + (d1 == d2)
        ) &&
        cows == (
            (a1 == b2) + (a1 == c2) + (a1 == d2) +
            (b1 == a2) + (b1 == c2) + (b1 == d2) +
            (c1 == a2) + (c1 == b2) + (c1 == d2) +
            (d1 == a2) + (d1 == b2) + (d1 == c2)
        );
}
 
const int setSize = 10000;
bool badNum[setSize];
 
int main()
{
    memset(badNum, 0, sizeof(badNum));
    for (int i = 0; i < setSize; i++)
        badNum[i] = !IsValid(i);
    while (true)
    {
        int bulls, cows;
        int question;
        for (question = 0; question < setSize && badNum[question]; question++);
        if (question >= setSize)
        {
            cout << "bye 8-|";
            break;
        }
        cout << question << " ???" << endl;
        cout << "bulls, cows: ";
        cin >> bulls >> cows;
        if (bulls == 4 && cows == 0)
        {
            cout << "that's it :-)";
            break;
        }
        for (int i = 0; i < setSize; i++)
            badNum[i] = badNum[i] || !Matches(i, question, bulls, cows);
    }
    cin.ignore(numeric_limits<streamsize>::max(), '\n');
    cin.ignore(numeric_limits<streamsize>::max(), '\n');
}
1
yulesik
0 / 0 / 0
Регистрация: 25.05.2010
Сообщений: 6
25.05.2010, 23:02 #18
Somebody, как я поняла, x -загаданное число, a,b,c,d - тысячи, сотни, десятки? первая цифра от 1 до 9, остальные любые, главное не должно быть повторяющихся. В badNum мы помещаем все числа, которые не прошли такую проверку.
C++
1
2
3
4
5
6
7
8
9
 bulls == (
                        (a1 == a2) + (b1 == b2) + (c1 == c2) + (d1 == d2)
                ) &&
                cows == (
                        (a1 == b2) + (a1 == c2) + (a1 == d2) +
                        (b1 == a2) + (b1 == c2) + (b1 == d2) +
                        (c1 == a2) + (c1 == b2) + (c1 == d2) +
                        (d1 == a2) + (d1 == b2) + (d1 == c2)
                );
Это он по какому принципу считает?
0
Somebody
2798 / 1609 / 149
Регистрация: 03.12.2007
Сообщений: 4,204
Завершенные тесты: 3
26.05.2010, 16:22 #19
Цитата Сообщение от yulesik Посмотреть сообщение
Это он по какому принципу считает?
Не понял вопрос. По определению быков с коровами и считает.
0
yulesik
0 / 0 / 0
Регистрация: 25.05.2010
Сообщений: 6
26.05.2010, 22:20 #20
что возвращает эта функция?
и как он запоминает?
Сам алгоритм получается просто перебирает все варианты?
0
Somebody
2798 / 1609 / 149
Регистрация: 03.12.2007
Сообщений: 4,204
Завершенные тесты: 3
27.05.2010, 00:22 #21
Цитата Сообщение от yulesik Посмотреть сообщение
что возвращает эта функция?
Возвращает ответ на вопрос, верно ли, что в паре чисел n1 - n2 bulls быков и cows коров.
Цитата Сообщение от yulesik Посмотреть сообщение
и как он запоминает?
В массиве badNums отмечаются nums, которые bad (:-), то есть которые уже не подошли.
Цитата Сообщение от yulesik Посмотреть сообщение
Сам алгоритм получается просто перебирает все варианты?
Как сказать... Каждый раз берёт какое-то из ещё не отсеянных чисел. Это самый оптимальный алгоритм - при стандартных правилах (4 цифры, 1-я не 0) ответ получается после максимум 7 вопросов.
0
yulesik
0 / 0 / 0
Регистрация: 25.05.2010
Сообщений: 6
28.05.2010, 21:11 #22
Цитата Сообщение от Somebody Посмотреть сообщение
В массиве badNums отмечаются nums, которые bad (:-), то есть которые уже не подошли.
А как он разбирается, что цифра не подошла?

Задача относится к теме искусственного интелекта?
0
Somebody
2798 / 1609 / 149
Регистрация: 03.12.2007
Сообщений: 4,204
Завершенные тесты: 3
29.05.2010, 15:27 #23
Цитата Сообщение от yulesik Посмотреть сообщение
А как он разбирается, что цифра не подошла?
Цитата Сообщение от Somebody Посмотреть сообщение
Все числа, на которые ответ юзера был бы не таким, помечаются как плохие.
Например, мы спрашиваем про 1023, ответ: 1 бык и 2 коровы, то загаданное число не может быть 4567, или 2310, или 1045, потому что в таком случае ответ был бы не таким. А вот 4032, 3821 всё ещё могут быть. Так постепенно числа отсеиваются.
Цитата Сообщение от yulesik Посмотреть сообщение
Задача относится к теме искусственного интелекта?
Вряд ли - здесь же есть точный алгоритм отгадывания.
2
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.05.2010, 15:27
Привет! Вот еще темы с ответами:

Доработка игры - добавить выбор стратегий для игры с компьютером - C++ Builder
Такая проблема: есть написанная игра, туда нужно добавить выбор стратегий для игры с компьютером. Как это сделать, подскажите, пожалуйста?

Нужно сделать алгоритм для игры "Быки и Коровы" - PascalABC.NET
Нужно чтобы я загадал число, и программа угадывала.

Алгоритм игры "Быки и коровы" - C#
Здравствуйте! Суть проблемы - плохо реализован алгоритм...вы загадываете 4х значное число без повторений, а компьютер должен его угадать. В...

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


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

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

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