Программа «Быки и коровы»

В мире компьютерных игр существует множество разнообразных головоломок и логических задач, но одной из наиболее увлекательных и захватывающих является игра «Быки и коровы». Эта простая, но умопомрачительно интересная игра требует от игрока сочетания умения логически мыслить и гармоничной комбинации удачи. В этой статье мы рассмотрим как можно реализовать программу «Быки и коровы».

Теория

Алгоритм программы для игры «Быки и коровы» можно разделить на следующие шаги:

  • Генерация загаданного числа. Программа генерирует случайное четырехзначное число без повторяющихся цифр. Это число становится загаданным числом.
  • Ввод попытки игроком. Игрок вводит свою попытку угадать число (тоже четырехзначное и без повторяющихся цифр).
  • Проверка попытки. Программа анализирует попытку игрока и сравнивает каждую цифру с соответствующей цифрой загаданного числа. Если цифра совпадает и находится на правильной позиции, это считается «быком«. Если цифра совпадает, но находится на неправильной позиции, это считается «коровой«. Программа подсчитывает количество быков и коров и сообщает игроку результат.
  • Проверка условия завершения. Если количество быков равно 4 (то есть все цифры угаданы на правильных позициях), игра завершается, и программа сообщает игроку о победе. В противном случае игра продолжается, и игроку предлагается ввести новую попытку.
  • Повторение шагов 2-4. Игра продолжает выполняться в цикле, пока игрок не угадает загаданное число.

C++

Запрограммируем игру «быки и коровы» — компьютер генерирует число из 4 неповторяющихся чисел, игрок должен угадать его.

#include <iostream>
#include <vector>
#include <cstdlib>
#include <ctime>

using namespace std;

// Функция для генерации случайного четырехзначного числа
vector<int> generateRandomNumber() {
    vector<int> number;
    srand(time(nullptr));

    // Генерируем первую цифру (не ноль)
    number.push_back(rand() % 9 + 1);

    // Генерируем остальные три цифры
    for (int i = 1; i < 4; ++i) {
        int digit = rand() % 10;
        number.push_back(digit);
    }

    return number;
}

// Функция для проверки быков и коров
pair<int, int> checkBullsAndCows(const vector<int>& secretNumber, const vector<int>& guess) {
    int bulls = 0;
    int cows = 0;

    for (int i = 0; i < 4; ++i) {
        if (guess[i] == secretNumber[i]) {
            bulls++;
        } else {
            for (int j = 0; j < 4; ++j) {
                if (guess[i] == secretNumber[j]) {
                    cows++;
                    break;
                }
            }
        }
    }

    return make_pair(bulls, cows);
}

int main() {
    vector<int> secretNumber = generateRandomNumber();
    vector<int> guess(4);

    int attempts = 0;

    cout << "Добро пожаловать в игру 'Быки и коровы'!" << endl;
    cout << "Попробуйте угадать четырехзначное число." << endl;

    while (true) {
        cout << "Введите вашу попытку (четыре цифры без пробелов): ";
        cin >> guess[0] >> guess[1] >> guess[2] >> guess[3];

        if (cin.fail()) {
            cout << "Ошибка! Введите четыре цифры без пробелов." << endl;
            cin.clear();
            cin.ignore(numeric_limits<streamsize>::max(), '\n');
            continue;
        }

        pair<int, int> result = checkBullsAndCows(secretNumber, guess);

        cout << "Результат: " << result.first << " бык(ов) и " << result.second << " коров(а)." << endl;

        if (result.first == 4) {
            cout << "Поздравляем! Вы угадали число: ";
            for (int digit : secretNumber) {
                cout << digit;
            }
            cout << endl;
            break;
        }

        attempts++;
    }

    cout << "Вы сделали " << attempts << " попыток." << endl;

    return 0;
}
3

Это решение было полезно?

Этот код создает случайное четырехзначное число и предлагает пользователю угадать его. Пользователь может вводить свои попытки, и программа будет сообщать количество быков и коров в каждой попытке. Игра продолжается, пока пользователь не угадает все четыре правильные цифры на правильных позициях (четыре быка).

C#

using System;
using System.Collections.Generic;
using System.Linq;

class Program
{
    static void Main()
    {
        List<int> secretNumber = GenerateSecretNumber();
        List<int> guess = new List<int>();
        int attempts = 0;

        Console.WriteLine("Добро пожаловать в игру 'Быки и коровы'!");
        Console.WriteLine("Попробуйте угадать четырехзначное число.");

        while (true)
        {
            Console.Write("Введите вашу попытку (четыре цифры без пробелов): ");
            string input = Console.ReadLine();

            if (input.Length != 4 || !input.All(char.IsDigit))
            {
                Console.WriteLine("Ошибка! Введите четыре цифры без пробелов.");
                continue;
            }

            guess = input.Select(c => int.Parse(c.ToString())).ToList();

            Tuple<int, int> result = CheckBullsAndCows(secretNumber, guess);
            Console.WriteLine($"Результат: {result.Item1} бык(ов) и {result.Item2} коров(а).");

            if (result.Item1 == 4)
            {
                Console.WriteLine("Поздравляем! Вы угадали число: " + string.Join("", secretNumber));
                break;
            }

            attempts++;
        }

        Console.WriteLine("Вы сделали " + attempts + " попыток.");
    }

    static List<int> GenerateSecretNumber()
    {
        List<int> numbers = Enumerable.Range(0, 10).ToList();
        List<int> secretNumber = new List<int>();
        Random random = new Random();

        for (int i = 0; i < 4; i++)
        {
            int index = random.Next(numbers.Count);
            secretNumber.Add(numbers[index]);
            numbers.RemoveAt(index);
        }

        return secretNumber;
    }

    static Tuple<int, int> CheckBullsAndCows(List<int> secret, List<int> guess)
    {
        int bulls = 0;
        int cows = 0;

        for (int i = 0; i < secret.Count; i++)
        {
            if (secret[i] == guess[i])
            {
                bulls++;
            }
            else if (secret.Contains(guess[i]))
            {
                cows++;
            }
        }

        return new Tuple<int, int>(bulls, cows);
    }
}
1

Это решение было полезно?

Python

import random

def generate_secret_number():
    """Генерирует случайное четырехзначное число без повторяющихся цифр."""
    digits = list(range(10))
    random.shuffle(digits)
    return digits[:4]

def check_bulls_and_cows(secret, guess):
    """Проверяет количество быков и коров в попытке пользователя."""
    bulls = 0
    cows = 0

    for i in range(4):
        if guess[i] == secret[i]:
            bulls += 1
        elif guess[i] in secret:
            cows += 1

    return bulls, cows

def main():
    secret_number = generate_secret_number()
    attempts = 0

    print("Добро пожаловать в игру 'Быки и коровы'!")
    print("Попробуйте угадать четырехзначное число.")

    while True:
        user_input = input("Введите вашу попытку (четыре цифры без пробелов): ")

        if len(user_input) != 4 or not user_input.isdigit():
            print("Ошибка! Введите четыре цифры без пробелов.")
            continue

        guess = [int(digit) for digit in user_input]
        bulls, cows = check_bulls_and_cows(secret_number, guess)

        print(f"Результат: {bulls} бык(ов) и {cows} коров(а).")

        if bulls == 4:
            print(f"Поздравляем! Вы угадали число: {''.join(map(str, secret_number))}")
            break

        attempts += 1

    print(f"Вы сделали {attempts} попыток.")

if __name__ == "__main__":
    main()
1

Это решение было полезно?

Java

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Random;
import java.util.Scanner;

public class BullsAndCowsGame {

    public static void main(String[] args) {
        List<Integer> secretNumber = generateSecretNumber();
        List<Integer> guess = new ArrayList<>();
        int attempts = 0;

        System.out.println("Добро пожаловать в игру 'Быки и коровы'!");
        System.out.println("Попробуйте угадать четырехзначное число.");

        while (true) {
            System.out.print("Введите вашу попытку (четыре цифры без пробелов): ");
            Scanner scanner = new Scanner(System.in);
            String input = scanner.next();

            if (input.length() != 4 || !input.matches("\\d+")) {
                System.out.println("Ошибка! Введите четыре цифры без пробелов.");
                continue;
            }

            for (int i = 0; i < 4; i++) {
                guess.add(Integer.parseInt(String.valueOf(input.charAt(i))));
            }

            int[] result = checkBullsAndCows(secretNumber, guess);
            System.out.println("Результат: " + result[0] + " бык(ов) и " + result[1] + " коров(а).");

            if (result[0] == 4) {
                System.out.println("Поздравляем! Вы угадали число: " + secretNumber);
                break;
            }

            attempts++;
            guess.clear();
        }

        System.out.println("Вы сделали " + attempts + " попыток.");
    }

    private static List<Integer> generateSecretNumber() {
        List<Integer> numbers = new ArrayList<>(Arrays.asList(0, 1, 2, 3, 4, 5, 6, 7, 8, 9));
        List<Integer> secretNumber = new ArrayList<>();
        Random random = new Random();

        for (int i = 0; i < 4; i++) {
            int index = random.nextInt(numbers.size());
            secretNumber.add(numbers.get(index));
            numbers.remove(index);
        }

        return secretNumber;
    }

    private static int[] checkBullsAndCows(List<Integer> secret, List<Integer> guess) {
        int bulls = 0;
        int cows = 0;

        for (int i = 0; i < 4; i++) {
            if (guess.get(i).equals(secret.get(i))) {
                bulls++;
            } else if (secret.contains(guess.get(i))) {
                cows++;
            }
        }

        return new int[]{bulls, cows};
    }
}
0

Это решение было полезно?

Pascal

program BullsAndCowsGame;

uses
  SysUtils, Math;

function GenerateSecretNumber: string;
var
  SecretNumber: string;
  Numbers: string;
  i, Index: Integer;
begin
  SecretNumber := '';
  Numbers := '0123456789';

  for i := 1 to 4 do
  begin
    Index := Random(Length(Numbers)) + 1;
    SecretNumber := SecretNumber + Numbers[Index];
    Delete(Numbers, Index, 1);
  end;

  Result := SecretNumber;
end;

function CheckBullsAndCows(SecretNumber, Guess: string): string;
var
  Bulls, Cows, i, j: Integer;
begin
  Bulls := 0;
  Cows := 0;

  for i := 1 to Length(SecretNumber) do
  begin
    if SecretNumber[i] = Guess[i] then
      Inc(Bulls)
    else
      for j := 1 to Length(Guess) do
        if (SecretNumber[i] = Guess[j]) and (i <> j) then
          Inc(Cows);
  end;

  Result := Format('%d бык(ов) и %d коров(а).', [Bulls, Cows]);
end;

var
  SecretNumber, UserGuess: string;
  Attempts: Integer;
begin
  Randomize;
  SecretNumber := GenerateSecretNumber;
  Attempts := 0;

  WriteLn('Добро пожаловать в игру "Быки и коровы"!');
  WriteLn('Попробуйте угадать четырехзначное число.');

  repeat
    Write('Введите вашу попытку (четыре цифры без пробелов): ');
    ReadLn(UserGuess);

    if Length(UserGuess) <> 4 then
      WriteLn('Ошибка! Введите четыре цифры без пробелов.')
    else
    begin
      WriteLn(CheckBullsAndCows(SecretNumber, UserGuess));
      Inc(Attempts);
    end;
  until CheckBullsAndCows(SecretNumber, UserGuess) = '4 бык(ов) и 0 коров(а).';

  WriteLn('Поздравляем! Вы угадали число: ', SecretNumber);
  WriteLn('Вы сделали ', Attempts, ' попыток.');
end.
0

Это решение было полезно?

JavaScript

function generateSecretNumber() {
  // Генерируем случайное четырехзначное число без повторяющихся цифр
  let numbers = Array.from({ length: 10 }, (_, i) => i);
  numbers = numbers.slice(1); // Удаляем 0 из чисел
  for (let i = numbers.length - 1; i > 0; i--) {
    const j = Math.floor(Math.random() * (i + 1));
    [numbers[i], numbers[j]] = [numbers[j], numbers[i]];
  }
  return numbers.slice(0, 4).join('');
}

function checkBullsAndCows(secret, guess) {
  let bulls = 0;
  let cows = 0;

  for (let i = 0; i < 4; i++) {
    if (guess[i] === secret[i]) {
      bulls++;
    } else if (secret.includes(guess[i])) {
      cows++;
    }
  }

  return [bulls, cows];
}

function playGame() {
  const secretNumber = generateSecretNumber();
  let attempts = 0;

  alert('Добро пожаловать в игру "Быки и коровы"!\nПопробуйте угадать четырехзначное число.');

  while (true) {
    let userGuess = prompt('Введите вашу попытку (четыре цифры без пробелов):');

    if (userGuess === null || userGuess.length !== 4 || !/^\d+$/.test(userGuess)) {
      alert('Ошибка! Введите четыре цифры без пробелов.');
      continue;
    }

    const result = checkBullsAndCows(secretNumber, userGuess);

    alert(`Результат: ${result[0]} бык(ов) и ${result[1]} коров(а).`);

    if (result[0] === 4) {
      alert(`Поздравляем! Вы угадали число: ${secretNumber}`);
      break;
    }

    attempts++;
  }

  alert(`Вы сделали ${attempts} попыток.`);
}

playGame();
1

Это решение было полезно?

PHP

<?php
function generateSecretNumber() {
  // Генерируем случайное четырехзначное число без повторяющихся цифр
  $numbers = range(0, 9);
  shuffle($numbers);
  return implode('', array_slice($numbers, 0, 4));
}

function checkBullsAndCows($secret, $guess) {
  $bulls = 0;
  $cows = 0;

  for ($i = 0; $i < 4; $i++) {
    if ($guess[$i] === $secret[$i]) {
      $bulls++;
    } elseif (in_array($guess[$i], str_split($secret))) {
      $cows++;
    }
  }

  return [$bulls, $cows];
}

function playGame() {
  $secretNumber = generateSecretNumber();
  $attempts = 0;

  echo "Добро пожаловать в игру 'Быки и коровы'!\n";
  echo "Попробуйте угадать четырехзначное число.\n";

  while (true) {
    $userGuess = readline("Введите вашу попытку (четыре цифры без пробелов): ");

    if (!preg_match('/^\d{4}$/', $userGuess)) {
      echo "Ошибка! Введите четыре цифры без пробелов.\n";
      continue;
    }

    $result = checkBullsAndCows($secretNumber, $userGuess);

    echo "Результат: {$result[0]} бык(ов) и {$result[1]} коров(а).\n";

    if ($result[0] === 4) {
      echo "Поздравляем! Вы угадали число: {$secretNumber}\n";
      break;
    }

    $attempts++;
  }

  echo "Вы сделали {$attempts} попыток.\n";
}

playGame();
?>
1

Это решение было полезно?

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 5,00 из 5)
Загрузка...
Давайте поможем друг другу! Если вы нашли ошибку или хотите предложить лучшее решение, пожалуйста, напишите об этом в комментариях.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *