“Быки и коровы”. Подскажите как правильно считать “Коров”

190
19 декабря 2018, 06:00

Не могу придумать нормальный алгоритм для подсчета коров, программа при вводе двух одинаковых двузначных чисел("3 6 3 6"сравниваем с "3 6 7 5") считает 4 коровы.

#include "std_lib_facilities.h"
//"БЫки и Коровы" v0.2
int main(int argc, char const *argv[])
{   
    bool condit=false,
         condit1=true;//условие
    vector<int> num;//вектор для хранения загадонного числа
    int h=0,//загадонные числ
        j=0,//отгадываемые числа 
        cow=0,//коровы
        bull=0;//быки
    hello_user("Быки и Коровы", 1);
    cout<<"Читай правила внимательно!\n\n"
        <<"///////////////////////////\n\n"
        <<"Компьютер загадыват четырех значное число,\n"
        <<"а ваша задача его отгадать.\n"
        <<"Компьютер будет вам помогать:\n"
        <<"Коровы - это отгаданые числа, но стоят не на своих местах.\n"
        <<"Быки - это отгаданые числа, которые стоят на своих местах.\n\n"
        <<"///////////////////////////\n\n";
    cout<<"Если ты понял правиа нжимай 'Enter'\n";
    do{
    cin.clear(); // сбрасываем флаг ошибки
    cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    if(condit1==true){
       //загадываем число
        for (int i = 0; i < 4; ++i)
        {
            h=randint(10);
            num.push_back(h);
            if(num.size()>4)num.clear();
            //cout<<num[i]<<endl;
        }
        condit1=false;
        cout<<"Можешь отгадывать я загадал числа от 0 до 9\n";
        array_print(num);}
    //////цикл для ввода чисад/////
    {   vector<int> num1;//для вводимого ползователем числа 
        for (int i = 0; i < num.size(); ++i)
    {
        cin>>j;
        num1.push_back(j);
    }
    array_print(num1);//создано для просмотра вектора
    //////////////////////////////
    for (int i = 0; i < num.size(); ++i)
    {
        if(num1[i]==num[i]) bull++;
        if(num1[0]==num[i]) cow++;
        if(num1[1]==num[i]) cow++;
        if(num1[2]==num[i]) cow++;
        if(num1[3]==num[i]) cow++;
    }
    }
    cout<<"Быков: "<<bull<<'\n'
        <<"Коров: "<<cow<<endl;
    if(bull==4){
        cout<<"Ты победил!\n"
            <<"Я загодал число: \n";
            array_printl(num);
            num.clear();
            condit=true;
            condit1=true;
            char i =' ';
            i = ask_user("Хочешь сыграть еще");
            if(i=='y'){
                condit=false;}
        }
    cow=0;
    bull=0; 
    }while(condit==false);
    return 0;
}

"std_lib_facilities.h"

#include <limits>
#include <iostream>
#include <fstream>
#include <sstream>
#include <cmath>
#include <cstdlib>
#include <string>
#include <list>
#include <vector>
#include <algorithm>
#include <stdexcept>
using namespace std;


void array_printl(vector<int> & arr)
{
    for (int i = 0; i < arr.size(); ++i) cout<<arr[i];
        cout<<endl;
}

void array_print(vector<int> & arr){for (int i = 0; i < arr.size(); ++i) cout<<i<<" Ячейка массива:"<<arr[i]<<endl;}

char ask_user(string question)
{
    cout<<question<<" ? (yes/no)\n";
    string answer = " ";
    cin>>answer;
    if(answer=="yes"||answer=="y") return 'y';
    if(answer=="No"||answer=="n") return 'n';
}
Answer 1

Так вам наверное надо исключить из дальнейших расчётов то число, которое отгадано:

for (int i = 0; i < num.size(); ++i)
{
    if(num1[i]==num[i]) { bull++; continue;}
    if(num1[0]==num[i]) { cow++; continue;}
    if(num1[1]==num[i]) { cow++; continue;}
    if(num1[2]==num[i]) { cow++; continue;}
    if(num1[3]==num[i]) { cow++; continue;}
}
READ ALSO
Почему рекурсивная функция возвращает 0?

Почему рекурсивная функция возвращает 0?

Программа выводит 05 2 - > 0

137
Инициализация обычная и через :v_(v)

Инициализация обычная и через :v_(v)

Недавно возникла проблема, что программа не работала при инициализации через :v_(v), а при обычном сработало, но разобраться, в чем проблема,...

152
Случайные числа с++

Случайные числа с++

Как правильно сгенерировать случайные числа от -20 до 70

190
Ошибка с инициализацией переменной

Ошибка с инициализацией переменной

Я не могу понять почему компилятор выдает мне ошибку Ошибка C4700 использована неинициализированная локальная переменная "TempNode"Вот мой код:

179