Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/153: Рейтинг темы: голосов - 153, средняя оценка - 4.56
2 / 2 / 0
Регистрация: 11.10.2009
Сообщений: 31

Быки и коровы

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

Студворк — интернет-сервис помощи студентам
Доброе время суток.
Пользователь загадывает число из 4 цифр, каждая из которых от 1 до 6, причем все цифры различны. Разработать алгоритм, который угадывает число по следующим правилам: выводится число и пользователь сообщает, сколько в нем "быков" и "коров", т.е. сколько цифр стоят на своих местах и сколько цифр содержатся в обоих числах, но совпадают лишь по значению. Например, пусть загадано число 1264, спрошено 1256. В этом случае 2 быка (1,2) и одна корова (6).
Подскажите как решать пожалуйста...
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
02.11.2009, 22:07
Ответы с готовыми решениями:

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

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

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

7
 Аватар для fantaz1
33 / 25 / 7
Регистрация: 08.11.2008
Сообщений: 107
03.11.2009, 11:08
делаеш с 2 чисел 2 char[4] к примеру, потом пробегаешся по елементам массивов и проверяеш если попадаюца одинаковые, то еще проверяеш не одинаковые ли у них порядковые номера если да то +1 бык нет то +1 корова..
0
Эксперт С++
 Аватар для odip
7176 / 3234 / 82
Регистрация: 17.06.2009
Сообщений: 14,164
03.11.2009, 21:58
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
2838 / 1647 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
04.11.2009, 00:05
Оптимальный алгоритм:
Создаётся массив boolов. Отмечаются "плохие" числа - которые не могут быть загаданы. Спрашивается любое "хорошее" число. Все числа, на которые ответ юзера был бы не таким, помечаются как плохие. И так далее... Если число отгадано - то хорошо, если все оставшиеся числа - плохие, то юзер натупил с ответами.
0
 Аватар для fantaz1
33 / 25 / 7
Регистрация: 08.11.2008
Сообщений: 107
04.11.2009, 11:11
odip ему как раз надо алгоритм решение, а не то что вы написали ему))) это олимпиадная задача с http://acm.dvpion.ru и он просто сам не может ее решить, и спрашивает тут!!)
0
Эксперт С++
 Аватар для odip
7176 / 3234 / 82
Регистрация: 17.06.2009
Сообщений: 14,164
04.11.2009, 22:26
2fantaz1: а я что написал ? алгоритм отгадывания и написал.
Только число шагов не минимальное, но этого в задании нет
2Somebody: От твоего текста до оптимального алгоритма весьма далеко.
0
2838 / 1647 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
04.11.2009, 23:52
Цитата Сообщение от odip Посмотреть сообщение
2Somebody: От твоего текста до оптимального алгоритма весьма далеко.
В каком смысле? - написано невнятно или алгоритм неоптимальный?
0
32 / 34 / 3
Регистрация: 27.12.2009
Сообщений: 106
30.01.2010, 21:52
Вот код на цпп, только его надо чуть-чуть исправить
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");
}
здесь ведется игра наоборот: комп задумывает число, а игрок должен его отгадать
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.01.2010, 21:52
Помогаю со студенческими работами здесь

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

Быки и коровы.
Доброе время суток! Можете помочь с реализацией игры &quot;Быки и коровы&quot;, много тем просмотрел, там все проги написаны только что бы...

Быки и коровы
написал игру быки и коровы. Ниже мой вариант. // ConsoleApplication1.cpp : Defines the entry point for the console application. // ...

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

Быки и коровы
Здравствуйте, помогите пжлст дописать игру &quot;быки и коровы&quot;. Начало кода с генерацией рандомных чисел #include &lt;vcl.h&gt;...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере нетипового документа выдачи шин для спецтехники с табличной частью, разработанного в конфигурации КА2. Номеклатура. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru