C++ (Qt) QTest::addColumn<int>("first"); QTest::addColumn<int>("second"); QTest::addColumn<int>("nbulls_expected"); QTest::addColumn<int>("ncows_expected"); QTest::newRow("bulls_and_cows_01") << 5671 << 7251 << 1 << 2; QTest::newRow("bulls_and_cows_02") << 1234 << 1234 << 4 << 0; QTest::newRow("bulls_and_cows_03") << 2034 << 6234 << 2 << 1;
C++ (Qt)/** * Возвращает (через ссылки) количество совпадений цифр двух * чисел на тех же позициях (быки) и на разных (коровы) * * @param first Первое число * @param second Второе число * @param nbulls Возвращаемое значение. Количество совпадений вместе с * позицией (быки) * @param ncows Возвращаемое значение. Количество совпадений, не * учитывая позицию (коровы) */void bulls_and_cows(int first, int second, int &nbulls, int &ncows) { div_t divresult_first; div_t divresult_second; int first_temp = first; int second_temp = second; std::vector<int> vec_first; std::vector<int> vec_second; const std::size_t nsize = 4; // Подсчёт быков for (std::size_t i = 0; i < nsize; ++i) { // Деление с сохранением частного и остатка divresult_first = div(first_temp, 10); divresult_second = div(second_temp, 10); // Сохраняем цифры для поиска коров vec_first.push_back(divresult_first.rem); vec_second.push_back(divresult_second.rem); // Поиск быков if (divresult_first.rem == divresult_second.rem) { ++nbulls; } first_temp = divresult_first.quot; second_temp = divresult_second.quot; } // Проверяем, что числа четырёхзначные if ( (vec_first.size() != nsize) && (vec_second.size() != nsize) ) { return; } // Подсчёт коров for (std::size_t i = 0; i < nsize; ++i) { std::vector<int>::const_iterator it = std::find(vec_second.begin(), vec_second.end(), vec_first[i]); if (it != vec_second.end()) { if (*it != vec_second[i]) { ++ncows; } } }}
C++ (Qt)#include <string>#include <fstream>#include <iostream>#include <cstdlib>#include <vector>#include <algorithm> //#define TESTING #ifndef TESTINGint readData(const std::string &iFileName, int &first, int &second);int writeResult(const std::string& oFileName, int nbulls, int ncows);int showError(int err, const std::string& fileName);void bulls_and_cows(int first, int second, int &nbulls, int &ncows); int main(int argc, char** argv) { // Входные данные int first; int second; // Имя входного файла std::string iFileName = "input.txt"; // Читаем данные из файла int err = readData(iFileName, first, second); if (err) return showError(err, iFileName); // Выполняем содержательную часть int nbulls, ncows; nbulls = ncows = 0; bulls_and_cows(first, second, nbulls, ncows); // Записываем выходной файл std::string oFileName = "output.txt"; err = writeResult(oFileName, nbulls, ncows); if (err) return showError(err, oFileName); return 0;} /** * Читаем данные из файла * * @param iFileName Имя входного файла * @param vec Массив, в который будут считаны входные данные * @return Код ошибки: 0 - если ошибок нет * 1 - если файл не удалось открыть * 2 - если в файле некорректные данные */int readData(const std::string& iFileName, int &first, int &second) { // Код ошибки int err = 0; // Открываем файл с входными данными std::ifstream in; in.open(iFileName.c_str()); if (!in.is_open()) { err = 1; return err; } // Считываем данные из файла if (in >> first >> second) { err = 0; return err; } else { err = 2; return err; } // Закрываем файл и возвращаем нулевой код ошибки in.close(); return err;} /** * Записываем результат выходной в файл * * @param iFileName Имя выходного файла * @param vec Массив, который нужно записать в файл * @return Код ошибки: 0 - если ошибок нет * 1 - если файл не удалось открыть * 2 - если в файле не удалось записать */int writeResult(const std::string& oFileName, int nbulls, int ncows) { // Открываем файл для записи std::ofstream out; out.open(oFileName.c_str()); if (!out.is_open()) { return 1; } // Записываем данные в файл out << nbulls << " " << ncows << std::endl; // Закрываем файл и возвращаем код ошибки out.close(); return 0;} /** * Выводит текст с ошибкой на экран * * @param err Код ошибки * @param iFileName Имя файла, в котором произошла ошибка */int showError(int err, const std::string& fileName) { switch (err) { case 1: std::cerr << "Error: could not open the file " << fileName.c_str() << std::endl; break; case 2: std::cerr << "Error: incorrect data in the file " << fileName.c_str() << std::endl; break; default: std::cerr << "Error code: " << err << "; file name: " << fileName.c_str() << std::endl; break; } return err;}#endif /** * Возвращает (через ссылки) количество совпадений цифр двух * чисел на тех же позициях (быки) и на разных (коровы) * * @param first Первое число * @param second Второе число * @param nbulls Возвращаемое значение. Количество совпадений вместе с * позицией (быки) * @param ncows Возвращаемое значение. Количество совпадений, не * учитывая позицию (коровы) */void bulls_and_cows(int first, int second, int &nbulls, int &ncows) { div_t divresult_first; div_t divresult_second; int first_temp = first; int second_temp = second; std::vector<int> vec_first; std::vector<int> vec_second; const std::size_t nsize = 4; // Подсчёт быков for (std::size_t i = 0; i < nsize; ++i) { // Деление с сохранением частного и остатка divresult_first = div(first_temp, 10); divresult_second = div(second_temp, 10); // Сохраняем цифры для поиска коров vec_first.push_back(divresult_first.rem); vec_second.push_back(divresult_second.rem); // Поиск быков if (divresult_first.rem == divresult_second.rem) { ++nbulls; } first_temp = divresult_first.quot; second_temp = divresult_second.quot; } // Проверяем, что числа четырёхзначные if ( (vec_first.size() != nsize) && (vec_second.size() != nsize) ) { return; } // Подсчёт коров for (std::size_t i = 0; i < nsize; ++i) { std::vector<int>::const_iterator it = std::find(vec_second.begin(), vec_second.end(), vec_first[i]); if (it != vec_second.end()) { if (*it != vec_second[i]) { ++ncows; } } }}
#include <stdio.h>#include <stdlib.h>#include <iostream>#include <string>#include <vector>#include <math.h>#include <list>#include <map>#include <set>#include <iomanip>#include <iterator>#include <sstream>#include <algorithm> using namespace std; int main(){ freopen( "input.txt", "r", stdin ); freopen( "output.txt", "w", stdout ); string s1, s2; cin >> s1 >> s2; int bulls=0, cows=0; // cout << s1 << " " << s2 << "\n"; for ( int i = 0; i < 4; i++ ) if ( s1[i] == s2[i] ) bulls++; for ( int i = 0; i < 4; i++ ) { for ( int j = 0; j < 4; j++ ) if ( s1[i] == s2[j] && i != j ) cows++; } cout << bulls << " " << cows /*<< "\n"*/; return 0;}
C++ (Qt)void bulls_and_cows(int iFirst, int iSecond, int & oBulls, int & oCows)
C++ (Qt)void bulls_and_cows(int firstNumber, int secondNumber, ...)
C++ (Qt)int readData(const std::string & fileName, int & oFirstNumber, int & oSecondNumber);
C++ (Qt)int writeResult(const std::string & fileName, int nBulls, int nCows);
C++ (Qt)int showError(int err, const std::string & fileName);
C++ (Qt)void bulls_and_cows(int firstNumber, int secondNumber, int & onBulls, int & onCows);
C++ (Qt)bulls_and_cows(first, second, nBulls, nCows);
C++ (Qt)bulls_and_cows(first, second, &nBulls, &nCows);
C++ (Qt)int main(int argc, char** argv) { // ... std::string iFileName = "input.txt"; // ... std::string oFileName = "output.txt"; // ...}
C++ (Qt)void bulls_and_cows(int firstNumber, int secondNumber, int &numberOfBulls, int &numberOfCows);
C++ (Qt) char *x; const QString &myString; const char * const y = "hello";