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

C++

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 64, средняя оценка - 4.70
lfin
2 / 2 / 0
Регистрация: 11.10.2009
Сообщений: 31
#1

Быки и коровы - C++

02.11.2009, 22:07. Просмотров 9259. Ответов 7
Метки нет (Все метки)

Доброе время суток.
Пользователь загадывает число из 4 цифр, каждая из которых от 1 до 6, причем все цифры различны. Разработать алгоритм, который угадывает число по следующим правилам: выводится число и пользователь сообщает, сколько в нем "быков" и "коров", т.е. сколько цифр стоят на своих местах и сколько цифр содержатся в обоих числах, но совпадают лишь по значению. Например, пусть загадано число 1264, спрошено 1256. В этом случае 2 быка (1,2) и одна корова (6).
Подскажите как решать пожалуйста...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.11.2009, 22:07
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Быки и коровы (C++):

Алгоритм игры Быки -коровы в С++ - C++
сложно ли реализовать алгоритм игры Быки -коровы в С++

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

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

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

Быки и коровы. - Visual C++
Доброе время суток! Можете помочь с реализацией игры "Быки и коровы", много тем просмотрел, там все проги написаны только что бы...

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

7
fantaz1
33 / 25 / 1
Регистрация: 08.11.2008
Сообщений: 107
03.11.2009, 11:08 #2
делаеш с 2 чисел 2 char[4] к примеру, потом пробегаешся по елементам массивов и проверяеш если попадаюца одинаковые, то еще проверяеш не одинаковые ли у них порядковые номера если да то +1 бык нет то +1 корова..
0
odip
Эксперт С++
7157 / 3219 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
03.11.2009, 21:58 #3
2fantaz1: ему нужен не алгоритм подсчета быков и коров, а алгоритм отгадывания.
Сначала нужно вручную проверить.
Думаю первый вопрос будет: 1234
Возможные ответы: 0,0 0,1 0,2 0,3 0,4 1,0 1,1 1,2 1,3 2,0 2,1 2,2 3,0 3,1 4,0

А вот дальше. В принципе можно полную схему вопросов вручную составить - но она будет достаточно большой.

Вопросы нужно задавать так, чтобы отгадать за как можно меньшее число вопросов.

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

Добавлено через 2 минуты
Если не нужно минимизировать число вопросов, тогда вопросы можно задавать например так:
вопрос: 1000
вопрос: 0100
вопрос: 0010
вопрос: 0001
И остальные так же.

То есть за 6*4 вопроса можно выяснить какое число загадал человек

Добавлено через 3 минуты
Можно еще короче:
вопрос1: 1100
если нет ни быков, ни коров - значит нет 1.
если есть бык - значит либо 1***, либо *1** - что легко проверяется с помощью 2-го вопроса.
если есть корова, значит либо **1*, либо ***1 - что тоже легко проверяется.

Итого вопросов уже максимум 12.

Добавлено через 2 минуты
На самом деле хватит 10 вопросов.
После 10 вопросов про 1,2,3,4,5 мы либо отгадаем число, либо останется одно пустое место.
Это пустое место - число 6.
0
Somebody
2789 / 1600 / 145
Регистрация: 03.12.2007
Сообщений: 4,193
Завершенные тесты: 1
04.11.2009, 00:05 #4
Оптимальный алгоритм:
Создаётся массив boolов. Отмечаются "плохие" числа - которые не могут быть загаданы. Спрашивается любое "хорошее" число. Все числа, на которые ответ юзера был бы не таким, помечаются как плохие. И так далее... Если число отгадано - то хорошо, если все оставшиеся числа - плохие, то юзер натупил с ответами.
0
fantaz1
33 / 25 / 1
Регистрация: 08.11.2008
Сообщений: 107
04.11.2009, 11:11 #5
odip ему как раз надо алгоритм решение, а не то что вы написали ему))) это олимпиадная задача с http://acm.dvpion.ru и он просто сам не может ее решить, и спрашивает тут!!)
0
odip
Эксперт С++
7157 / 3219 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
04.11.2009, 22:26 #6
2fantaz1: а я что написал ? алгоритм отгадывания и написал.
Только число шагов не минимальное, но этого в задании нет
2Somebody: От твоего текста до оптимального алгоритма весьма далеко.
0
Somebody
2789 / 1600 / 145
Регистрация: 03.12.2007
Сообщений: 4,193
Завершенные тесты: 1
04.11.2009, 23:52 #7
Цитата Сообщение от odip Посмотреть сообщение
2Somebody: От твоего текста до оптимального алгоритма весьма далеко.
В каком смысле? - написано невнятно или алгоритм неоптимальный?
0
ailia
27 / 26 / 1
Регистрация: 27.12.2009
Сообщений: 106
30.01.2010, 21:52 #8
Вот код на цпп, только его надо чуть-чуть исправить
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
#include <iostream>
#include <ctime>
 
using namespace std;
 
int mass1[4],mass2[4], inp;
 
void zadum()
{
    srand(time(0));
    mass1[0] = rand()%9 + 1;
    for (int I = 1; I <= 3; I++)
        mass1[I] = rand()%10;
}
void razb()
{
    int del = 10;
    for(int i = 3; i  > -1; i--)
    { 
        mass2[i] = inp % 10;
        inp /= 10;
    }
 
}
int b()
{
    int res = 0;
    for (int I = 0; I < 4; I++)
        if (mass1[I] == mass2[I])
            res++;
    return res;
}
int c()
{
    int res = 0;
    for (int I = 0; I < 4; I++)
        for (int J = 0; J < 4; J++)
            if (mass1[I] == mass2[J] && I != J)
                res++;
    return res;
}
void game()
{
    zadum();
    cout << "Число  Б К\n"
         << "----------\n";
    for(;;)
    {
        cin >> inp;
        razb();
        cout << "       " << b() << " " << c() << "\n";
        if (b() == 4)
        {
            cout << "Вы выйграли!!!\n";
            break;
        }
    }
}
void main()
{
    setlocale(0, "Russian");
    char M;
    cout << "Здравствуйте, это игра 'Быки и коровы'.\n"
         << "Компьютер задумал 4-хзначное число. Ваша задача - отгадать его посредством ввода чисел.\n"
         << "Если цифра совпадает, но стоит на другом месте - это корова, если стоит на том же месте - бык.\n\n";
    for (;;)
    {
        game();
        cout << "Ещё раз? (Д/Н)\n"; cin >> M;
        if (M == 'н' || M == 'Н')
        break;
    }
    system("pause");
}
здесь ведется игра наоборот: комп задумывает число, а игрок должен его отгадать
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.01.2010, 21:52
Привет! Вот еще темы с ответами:

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

Быки и коровы - Delphi
Доброго времени суток. Не могу реализовать человеческий поиск коров в Delphi. Имеется массив цифр загаданного 4-значного числа и массив...

Быки и коровы - Pascal ABC
program biki_i_korovi;//v.1.0 {Здраствуйте,я уже совсем отчаялся.....Помогите !!! Как написать цикл ,чтобы он выполнял все эти процедуры...

Быки и коровы - C (СИ)
всем приятного времени суток!:) в общем, задание такое: надо реализовать игру &quot;Быки и коровы&quot;( надо угадать задуманное кем-то число! в...


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

Или воспользуйтесь поиском по форуму:
8
Yandex
Объявления
30.01.2010, 21:52
Ответ Создать тему
Опции темы

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