Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <ctime>
- #include <cstring>
- using namespace std;
- int const n = 4;
- //Петров Даниил, ИП-912//
- char digit[11] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '\0'};
- void fillrand(char a[]) { //функция загадывания числа без повторяющихся цифр в числе
- srand(time(nullptr));
- bool there;
- int element;
- for (int i = 0; i < n;) {
- there = false;
- element = rand() % 9; //создаем рандомное число
- for (int j = 0; j < i; ++j) {
- if (a[j] == (element + '0')) { //если уже есть в массиве, то истина
- there = true;
- break;
- }
- }
- if (!there) { //записать в массив, если не нашлось повторений
- a[i] = element + '0';
- ++i;
- }
- }
- }
- void print(char a[]) { //функция вывода числа
- for (int j = 0; j < n; ++j) {
- cout << a[j];
- }
- cout << endl;
- }
- int write(char a[], const char b[]) {//функция записи числа пользователем и проверкой на корректность
- char arr[20];
- int j = 0, k = 0;
- cin >> arr;
- int size = strlen(arr); //считаем длину числа
- for (int i = 0; i < n; ++i) {
- a[i] = arr[i];
- }
- if (size != 4) { //если не 4-значное просим ввести число заново
- cout << "Enter four-digit number, please: ";
- return -1;
- } else {//проверяем 4-значное ли оно
- for (int i = 0; arr[i] != '\0'; ++i) {
- while (b[j] != '\0') {
- if (arr[i] == b[j])
- ++k;
- ++j;
- if (k == 1) break;
- }
- if (k == 0) {
- cout << "Enter again, please: ";
- return -1;
- }
- j = 0;
- k = 0;
- }
- for (int i = 0; arr[i] != '\0'; ++i) { //обвчное заполнение через остакток от деления на 10 и делением числа на 10
- for (j = 0; j < i; ++j) {
- if (arr[i] == arr[j]) { //проверка если есть поторяющиеся цифры в числе
- cout << "Enter again, please: ";
- return -1;
- }
- }
- }
- return 1;
- }
- }
- void correct(char a[], const char b[]) { //функция корректного ввода
- int k;
- do {
- k = write(a, b);
- } while (k != 1);
- }
- void
- check(const char comp[], char hum[], const char b[]) { //функция проверки числа на совпадение чисел и позций этих чисел
- int bulls = 0, cows = 0;
- while (true) { //пока не угадали число
- for (int i = 0; i < n; ++i) {
- for (int j = 0; j < n; ++j) {
- if (i != j) { //чтобы не сравнивать одни и те же элементы
- if (hum[i] == comp[j]) { //если совпали увеличиваем счетчик коров
- ++cows;
- }
- } else { //если совпали элементы на одинаковых позициях увеличиваем счетчик быков
- if (hum[i] == comp[j])
- ++bulls;
- }
- }
- }
- if (bulls == 4) { //если все позиции совпали, то число отгадано
- cout << "Victory!";
- break;
- }
- cout << "bulls: " << bulls << endl << "cows: " << cows
- << endl; //если не удалось отгадать снова вводим число и начинаем заново
- cout << "Try again, please: ";
- correct(hum, b);
- bulls = 0; //обнуляем счетчики после введения нового числа
- cows = 0;
- }
- }
- int main() {
- cout << "Number guessed try guessing it!" << endl << "Your number: " << endl;
- char number[n], arry[n];
- fillrand(number);
- print(number);
- correct(arry, digit);
- print(arry);
- check(number, arry, digit);
- return 0;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement