0 / 0 / 0
Регистрация: 10.06.2016
Сообщений: 3
1

Функция для игры "быки и коровы"

05.08.2016, 12:48. Показов 9465. Ответов 5
Метки нет (Все метки)

Помогите составить код для С++, для раздела Функции.

сама задача

Компьютер задумывает четырехзначное число, не содержащее двух одинаковых цифр.
Вы набираете свое число, и компьютер сообщает количество быков (точно угаданных цифр)
и количество коров (цифр, которые есть в задуманном числе, но на другом месте).
Например, пусть задуманное число 5734, а вы набрали 0755. Результат будет 1 бык и 2 коровы.
Игра продолжается до тех пор, пока вы не получите четыре быка.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.08.2016, 12:48
Ответы с готовыми решениями:

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

Ошибка в коде игры "Быки и коровы"
#include <iostream> #include "Game.h" using namespace std; Game::Game() { com; per; }...

Алгоритм игры "Быки и коровы"
Игра "Быки и коровы". Вы загадываете пятизначное число. Программа дает Вам другое четырехзначное...

Нужен исходник программы "Быки и коровы" с минимальной итерацией
Нигде не нашел код с подобными условиями. Преподаватель решил максимально усложнить задачу. Сам я...

5
Заблокирован
05.08.2016, 13:29 2
Простоe объявление функции имеет примерно такой формат:
C++
1
тип_возвращаемого_значения имя_функции(параметры);
Что не получается?
1
Заблокирован
05.08.2016, 14:30 3
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
void getNum(char *comp)
{
    char a[10];
    for(int i=0; i<10; i++) a[i]=48+i;
    for(int i=0; i<4; i++) 
    {
        int n=rand()%(10-i);
        comp[i]=a[n];
        for(int j=n; j<9; j++) a[j]=a[j+1];
    }
    //cout<<comp<<endl;
}
int BullCow(char *comp,char *my,int& c)
{
    int b=0;
    c=0;
    for(int i=0; i<4; i++)
        for(int j=0; j<4; j++)
            if(comp[i]==my[j])
            {
                c++;
                if(i==j) b++;
            }
    return b;
}
void main(int argc,char* argv[])
{
    setlocale(LC_ALL, "Rus");
    srand(unsigned(time(0)));
    char comp[5]="";
    getNum(comp);
    int b,c;
    do
    {
        cout<<"Число: ";
        char my[5]="";
        gets(my);
        b=BullCow(comp,my,c);
        cout<<"Быки: "<<b<<"  коровы: "<<c<<endl;
    }while(b<4);
    system("pause");
    return;
}
1
365 / 321 / 219
Регистрация: 21.02.2013
Сообщений: 756
05.08.2016, 15:14 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
#include <iostream>
#include <stdlib.h>
using namespace std;
void func (const int &number){
 int bik, korova, input;
do{
    cin >> input;
    bik = korova = 0;
 
     for(int i = 1000; i != 0; i/= 10){
        if( (input / i % 10)==(number / i % 10))
        bik++;
    }
    for(int i = 1000; i != 0; i/= 10){
        for(int j = 1000; j != 0; j/= 10)
        {
            if(i != j && (input / i % 10)==(number / j % 10))
            korova++;
        }
    }
    cout << "kolichestvo bikov: " << bik << " kolichestvo korov: " << korova << endl;
 
    }while (bik < 4);
 
}
int main()
{
    srand(time(NULL));
    bool bmap[10];
    for(int i = 0; i != 10; i++) bmap[i] = true;
    int n, number = 0;
    for(int i = 1; i != 10000; i*= 10)
    {
        do{
               n=1+ rand()%9;
        }while(bmap[n]== false);
        bmap[n]=false;
        number += i * n;
    }
    cout << number << endl;
 
 
    func(number);
 
 
    return 0;
}
1
2098 / 1619 / 690
Регистрация: 27.07.2012
Сообщений: 4,853
05.08.2016, 16:09 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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#include <iostream>
#include <algorithm>
#include <ctime>
#include <cstdlib>
#include <map>
#include <string>
using namespace std;
 
typedef map<int, int> M;
 
class ChoosePeg
{
public:
    ChoosePeg(const string & digits) : digits_(digits) {}
    char operator()() const { return digits_[rand () % digits_.size()]; }
private:
    const string & digits_;
};
 
class CountPlace
{
public:
    CountPlace(M & cm, M & gm, int & pok)
        : cm_(cm), gm_(gm), pok_(pok = 0) {}
    char operator()(char c, char g)
    {
        return ++cm_[c],
            ++gm_[g],
            pok_ += (c == g),
            g;
    }
private:
    M &cm_, &gm_;
    int & pok_;
};
 
class CountColor
{
public:
    CountColor(M & cm, M & gm, int & cok)
        : cm_(cm), gm_(gm), cok_(cok = 0) {}
    void operator()(char c) const
    {
        cok_ += min(cm_[c], gm_[c]);
    }
private:
    M &cm_, &gm_;
    int & cok_;
};
 
int main()
{
    const string digits("0123456789");
    string comb(5, '.'), guess;
    int cok, pok = 0;
    M cm, gm;
 
    srand(static_cast<unsigned int>(time(0))), generate(comb.begin(), comb.end(), ChoosePeg(digits));
 
    while (pok < comb.size())
        cout << "\nguess -> ",
        cin >> guess,
        guess.resize(comb.size(), ' '),
        cm = gm = M(),
        transform(comb.begin(), comb.end(), guess.begin(), guess.begin(), CountPlace(cm, gm, pok)),
        for_each(digits.begin(), digits.end(), CountColor(cm, gm, cok)),
        cout << cok << ' ' << pok;
 
    cout << " - solved!\n";
    system("pause");
}
Добавлено через 2 минуты
Тут только на 5 чисел. Исправьте там циферку.
1
0 / 0 / 0
Регистрация: 10.06.2016
Сообщений: 3
15.08.2016, 16:31  [ТС] 6
пытаюсь разобраться с темой. пока информации на странице достаточно.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.08.2016, 16:31
Помогаю со студенческими работами здесь

игра "быки и коровы"
Хочу реализовать программу игры &quot;быки и коровы&quot;, но где-то в третьем сравнении есть ошибка. Суть...

Игра "быки и коровы"
Доброго всем времени.Помогите понять задачу. Компьютер задумывает четырехзначное число, не...

ООП для создания игры с классами "карта", "игрок", "враги"
Тут такой вопрос, я пишу игру. В игре есть карта,игрок,враги, отлавливание нажатий клавиш, для...

Для каждой строки найти слова, которые не имеют ни одного из букв: "l", "k", "r", "s" i "j"
Задано символьные строки. Строка состоит из нескольких слов (наборов символов), которые разделяются...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru