Программа, угадывающая число

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

Теория

Метод бинарного поиска — это эффективный алгоритм поиска элемента в отсортированном массиве или списке данных. Он работает путем деления массива или списка на две равные части и сравнения искомого элемента с элементом в середине. Если элемент найден, поиск завершается. В противном случае выбирается одна из двух подмассивов для дальнейшего поиска, и процесс повторяется до тех пор, пока элемент не будет найден или пока не останется один элемент в массиве.

Алгоритм метода бинарного поиска:

  • Задать левую (left) и правую (right) границы поиска в массиве (или списке). Начальные значения будут равны 0 и длине массива минус 1.
  • Пока левая граница (left) меньше или равна правой границе (right), выполняй следующие шаги:
  • a. Вычислить средний индекс (middle) как (left + right) / 2.
  • b. Сравнить элемент в среднем индексе (array[middle]) с искомым элементом.
  • c. Если элемент в среднем индексе равен искомому элементу, то элемент найден, и поиск завершается. Вернуть middle.
  • d. Если элемент в среднем индексе больше искомого элемента, обновить правую границу (right) на (middle — 1).
  • e. Если элемент в среднем индексе меньше искомого элемента, обновить левую границу (left) на (middle + 1).
  • Если элемент не был найден после завершения цикла, вернуть -1 (или другое значение, которое указывает на отсутствие элемента).

Этот алгоритм обеспечивает эффективный поиск в упорядоченных данных, и его сложность составляет O(log n), где n — количество элементов в массиве или списке.

C++

Пример программы на C++, которая отгадывает число, задуманное пользователем от 1 до 100, используя не более семи попыток:

#include <iostream>

int main() {
    int min = 1;
    int max = 100;
    int attempts = 0;
    char answer;

    std::cout << "Загадайте число от 1 до 100." << std::endl;

    while (true) {
        int guess = (min + max) / 2;
        attempts++;

        std::cout << "Ваше число " << guess << "? (y/n): ";
        std::cin >> answer;

        if (answer == 'y' || answer == 'Y') {
            std::cout << "Программа угадала ваше число " << guess << " за " << attempts << " попыток." << std::endl;
            break;
        } else if (answer == 'n' || answer == 'N') {
            std::cout << "Ваше число меньше " << guess << "? (y/n): ";
            std::cin >> answer;
            if (answer == 'y' || answer == 'Y') {
                max = guess - 1;
            } else {
                min = guess + 1;
            }
        } else {
            std::cout << "Пожалуйста, ответьте 'y' (да) или 'n' (нет)." << std::endl;
        }

        if (attempts >= 7) {
            std::cout << "Программа не смогла угадать число. Попробуйте еще раз." << std::endl;
            break;
        }
    }

    return 0;
}

Эта программа использует метод бинарного поиска для угадывания числа, задуманного пользователем. Она задает вопросы и определяет, больше или меньше задуманное число, чем текущее предположение. Программа завершает выполнение, когда угадывает число или количество попыток достигает семи.

C#

using System;

namespace GuessTheNumber
{
    class Program
    {
        static void Main(string[] args)
        {
            int min = 1;
            int max = 100;
            int attempts = 0;
            string answer;

            Console.WriteLine("Загадайте число от 1 до 100.");

            while (true)
            {
                int guess = (min + max) / 2;
                attempts++;

                Console.Write($"Ваше число {guess}? (y/n): ");
                answer = Console.ReadLine();

                if (answer.Equals("y", StringComparison.OrdinalIgnoreCase))
                {
                    Console.WriteLine($"Программа угадала ваше число {guess} за {attempts} попыток.");
                    break;
                }
                else if (answer.Equals("n", StringComparison.OrdinalIgnoreCase))
                {
                    Console.Write($"Ваше число меньше {guess}? (y/n): ");
                    answer = Console.ReadLine();
                    if (answer.Equals("y", StringComparison.OrdinalIgnoreCase))
                    {
                        max = guess - 1;
                    }
                    else
                    {
                        min = guess + 1;
                    }
                }
                else
                {
                    Console.WriteLine("Пожалуйста, ответьте 'y' (да) или 'n' (нет).");
                }

                if (attempts >= 7)
                {
                    Console.WriteLine("Программа не смогла угадать число. Попробуйте еще раз.");
                    break;
                }
            }
        }
    }
}

Python

def main():
    min_num = 1
    max_num = 100
    attempts = 0

    print("Загадайте число от 1 до 100.")

    while True:
        guess = (min_num + max_num) // 2
        attempts += 1

        print(f"Ваше число {guess}? (y/n): ")
        answer = input().strip().lower()

        if answer == 'y':
            print(f"Программа угадала ваше число {guess} за {attempts} попыток.")
            break
        elif answer == 'n':
            print(f"Ваше число меньше {guess}? (y/n): ")
            answer = input().strip().lower()
            if answer == 'y':
                max_num = guess - 1
            else:
                min_num = guess + 1
        else:
            print("Пожалуйста, ответьте 'y' (да) или 'n' (нет).")

        if attempts >= 7:
            print("Программа не смогла угадать число. Попробуйте еще раз.")
            break

if __name__ == "__main__":
    main()

Java

import java.util.Scanner;

public class GuessTheNumber {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int min = 1;
        int max = 100;
        int attempts = 0;
        String answer;

        System.out.println("Загадайте число от 1 до 100.");

        while (true) {
            int guess = (min + max) / 2;
            attempts++;

            System.out.print("Ваше число " + guess + "? (y/n): ");
            answer = scanner.nextLine().trim().toLowerCase();

            if (answer.equals("y")) {
                System.out.println("Программа угадала ваше число " + guess + " за " + attempts + " попыток.");
                break;
            } else if (answer.equals("n")) {
                System.out.print("Ваше число меньше " + guess + "? (y/n): ");
                answer = scanner.nextLine().trim().toLowerCase();
                if (answer.equals("y")) {
                    max = guess - 1;
                } else {
                    min = guess + 1;
                }
            } else {
                System.out.println("Пожалуйста, ответьте 'y' (да) или 'n' (нет).");
            }

            if (attempts >= 7) {
                System.out.println("Программа не смогла угадать число. Попробуйте еще раз.");
                break;
            }
        }

        scanner.close();
    }
}

Pascal

program GuessTheNumber;

var
  min, max, guess, attempts: Integer;
  answer: Char;

begin
  min := 1;
  max := 100;
  attempts := 0;

  Writeln('Загадайте число от 1 до 100.');

  while True do
  begin
    guess := (min + max) div 2;
    Inc(attempts);

    Write('Ваше число ', guess, '? (y/n): ');
    Readln(answer);

    if (answer = 'y') or (answer = 'Y') then
    begin
      Writeln('Программа угадала ваше число ', guess, ' за ', attempts, ' попыток.');
      Break;
    end
    else if (answer = 'n') or (answer = 'N') then
    begin
      Write('Ваше число меньше ', guess, '? (y/n): ');
      Readln(answer);
      if (answer = 'y') or (answer = 'Y') then
        max := guess - 1
      else
        min := guess + 1;
    end
    else
    begin
      Writeln('Пожалуйста, ответьте ''y'' (да) или ''n'' (нет).');
    end;

    if attempts >= 7 then
    begin
      Writeln('Программа не смогла угадать число. Попробуйте еще раз.');
      Break;
    end;
  end;
end.

JavaScript

function guessTheNumber() {
    let min = 1;
    let max = 100;
    let attempts = 0;

    alert("Загадайте число от 1 до 100.");

    while (true) {
        let guess = Math.floor((min + max) / 2);
        attempts++;

        let answer = prompt(`Ваше число ${guess}? (y/n):`).toLowerCase();

        if (answer === 'y') {
            alert(`Программа угадала ваше число ${guess} за ${attempts} попыток.`);
            break;
        } else if (answer === 'n') {
            let hint = prompt(`Ваше число меньше ${guess}? (y/n):`).toLowerCase();
            if (hint === 'y') {
                max = guess - 1;
            } else {
                min = guess + 1;
            }
        } else {
            alert("Пожалуйста, ответьте 'y' (да) или 'n' (нет).");
        }

        if (attempts >= 7) {
            alert("Программа не смогла угадать число. Попробуйте еще раз.");
            break;
        }
    }
}

guessTheNumber();

PHP

<!DOCTYPE html>
<html>
<head>
    <title>Угадай число</title>
</head>
<body>
    <p>Угадайте число от 1 до 100</p>
    <p>Загадайте число, и программа будет пытаться угадать его.</p>

    <?php
    $min = 1;
    $max = 100;
    $attempts = 0;

    echo '<p>Загадайте число от ' . $min . ' до ' . $max . '.</p>';

    while (true) {
        $guess = floor(($min + $max) / 2);
        $attempts++;

        echo '<p>Ваше число ' . $guess . '? (y/n):</p>';

        $answer = strtolower(trim(fgets(STDIN)));

        if ($answer === 'y') {
            echo '<p>Программа угадала ваше число ' . $guess . ' за ' . $attempts . ' попыток.</p>';
            break;
        } elseif ($answer === 'n') {
            echo '<p>Ваше число меньше ' . $guess . '? (y/n):</p>';
            $hint = strtolower(trim(fgets(STDIN)));
            if ($hint === 'y') {
                $max = $guess - 1;
            } else {
                $min = $guess + 1;
            }
        } else {
            echo '<p>Пожалуйста, ответьте "y" (да) или "n" (нет).</p>';
        }

        if ($attempts >= 7) {
            echo '<p>Программа не смогла угадать число. Попробуйте еще раз.</p>';
            break;
        }
    }
    ?>

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

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

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