Вопрос задан 04.04.2025 в 08:01. Предмет Информатика. Спрашивает Меркулова Диана.

Заполнить массив случайными числами и отсортировать его. Ввести число X.
Используя двоичный поиск, определить, сколько чисел, равных X, находится в массиве.
Пример:
Массив:
1 4 7 3 9 2 4 5 2
После сортировки:
1 2 2 3 4 4 5 7 9
Введите число X:
4
Число 4 встречается 2 раз(а).
Пример:
Массив:
1 4 7 3 9 2 4 5 2
После сортировки:
1 2 2 3 4 4 5 7 9
Введите число X:
14
Число 14 не встречается.

Перейти к ответам

Ответы на вопрос

Отвечает Тренина Варвара.

Решение задачи:

  1. Создание массива случайных чисел и его сортировка: Сначала нужно заполнить массив случайными числами, после чего его отсортировать.

  2. Ввод числа X: Пользователь вводит число XX, которое необходимо найти в массиве.

  3. Двоичный поиск: Используем двоичный поиск для нахождения числа XX в массиве и подсчитываем количество его вхождений.

  4. Вывод результата: Если XX найдено, выводим количество его вхождений. Если нет, сообщаем, что число не встречается.

Пример кода на Python:

python
import random

# 1. Генерация массива и его сортировка n = 10 # Длина массива array = [random.randint(1, 10) for _ in range(n)] # Заполнение случайными числами от 1 до 10 array.sort() # Сортировка массива print("Отсортированный массив:", array)

# 2. Ввод числа X x = int(input("Введите число X: "))

# 3. Реализация двоичного поиска def binary_search_count(arr, target): def find_first(arr, target): left, right = 0, len(arr) - 1 while left <= right: mid = (left + right) // 2 if arr[mid] < target: left = mid + 1 else: right = mid - 1 return left

def find_last(arr, target): left, right = 0, len(arr) - 1 while left <= right: mid = (left + right) // 2 if arr[mid] <= target: left = mid + 1 else: right = mid - 1 return right

first = find_first(arr, target) last = find_last(arr, target)

if first <= last: return last - first + 1 else: return 0

# 4. Подсчет количества вхождений X count = binary_search_count(array, x)

# 5. Вывод результата if count > 0: print(f"Число {x} встречается {count} раз(а).") else: print(f"Число {x} не встречается.")

Пояснение кода:

  1. Генерация массива: Используется random.randint для создания массива случайных чисел.

  2. Сортировка: Метод sort() упорядочивает массив по возрастанию.

  3. Двоичный поиск:

    • Нахождение первого вхождения: Функция find_first определяет, где начинается последовательность чисел, равных XX.
    • Нахождение последнего вхождения: Функция find_last определяет, где заканчивается последовательность чисел, равных XX.
    • Количество вхождений вычисляется как разность между последним и первым индексами плюс 1.
  4. Вывод результата: Если результат равен 0, значит, число XX отсутствует в массиве.

Пример работы программы:

Ввод:

less
Отсортированный массив: [1, 2, 2, 3, 4, 4, 5, 7, 9] Введите число X: 4

Вывод:

scss
Число 4 встречается 2 раз(а).

Ввод:

less
Отсортированный массив: [1, 2, 2, 3, 4, 4, 5, 7, 9] Введите число X: 14

Вывод:

Число 14 не встречается.

Похожие вопросы

Топ вопросов за вчера в категории Информатика

Последние заданные вопросы в категории Информатика

Задать вопрос