Тема 5. Алгоритмы – анализ простейших алгоритмов

5.04 Прочие прототипы

Вспоминай формулы по каждой теме
Решай новые задачи каждый день
Вдумчиво разбирай решения
ШКОЛКОВО.
Готовиться с нами - ЛЕГКО!
Подтемы раздела алгоритмы – анализ простейших алгоритмов
Решаем задачи

Ошибка.
Попробуйте повторить позже

Задача 1#30302Максимум баллов за задание: 1

Алгоритм получает на вход натуральное число N  > 1  и строит по нему новое число R  следующим образом:

  1. Если исходное число кратно 3  , оно делится на 3  , иначе из него вычитается 1  .
  2. Если полученное на предыдущем шаге число кратно 5  , оно делится на 5  , иначе из него вычитается 1  .
  3. Если полученное на предыдущем шаге число кратно 11  , оно делится на 11  , иначе из него вычитается 1  .
  4. Число, полученное на шаге 3  , считается результатом работы алгоритма.

Сколько существует различных натуральных чисел N  , при обработке которых получится R = 2  ?

Показать ответ и решение

Решение программой:

В этой задаче нам необходимо определить, сколько различных натуральных чисел N при обработке алгоритмом дают результат R = 2. Для этого мы сначала «переводим» пошаговое описание алгоритма с естественного языка на язык Python. Мы начинаем с цикла for, перебирающего все числа от 2 до некоторого верхнего предела (например, 100000) — это гарантирует, что мы рассмотрим все возможные варианты N, больше 1. Внутри цикла текущее число сохраняем в переменную s, с которой будем работать. На первом шаге проверяем, делится ли число на 3, используя оператор s

Далее аналогично обрабатываем проверку делимости на 5. Если текущее число кратно 5, делим его на 5 (s //= 5), иначе уменьшаем на 1 (s -= 1). После этого проверяем делимость на 11: если число делится на 11, выполняем деление на 11 (s //= 11), иначе снова вычитаем 1 (s -= 1). После этих трёх последовательных шагов мы получаем число, которое алгоритм считает результатом работы, и сохраняем его в переменной s. На последнем этапе проверяем, равно ли это число 2 (if s == 2). Если условие выполняется, мы увеличиваем счётчик ans на 1, чтобы учитывать найденное число N. После завершения перебора выводим значение счётчика, что и даст количество всех натуральных чисел N, для которых алгоритм даёт R = 2.

# Инициализация счётчика найденных чисел N
ans = 0

# Перебор всех натуральных чисел N, начиная с 2 (так как N > 1)
for i in range(2, 100000):
    # Копируем текущее число в переменную s для обработки
    s = i

    # Шаг 1: проверяем, делится ли s на 3
    if s % 3 == 0:
        # Если делится, делим s на 3
        s //= 3
    else:
        # Если не делится, вычитаем 1
        s -= 1

    # Шаг 2: проверяем, делится ли текущее s на 5
    if s % 5 == 0:
        # Если делится, делим на 5
        s //= 5
    else:
        # Если не делится, вычитаем 1
        s -= 1

    # Шаг 3: проверяем, делится ли текущее s на 11
    if s % 11 == 0:
        # Если делится, делим на 11
        s //= 11
    else:
        # Если не делится, вычитаем 1
        s -= 1

    # Проверка: если полученное число равно 2, увеличиваем счётчик
    if s == 2:
        ans += 1

# Выводим общее количество чисел N, для которых алгоритм даёт R = 2
print(ans)
                                                                                                     
                                                                                                     

Ответ: 6

Ошибка.
Попробуйте повторить позже

Задача 2#57742Максимум баллов за задание: 1

Автомат получает на вход трехзначное число. По этому числу строится новое число по следующим правилам.
1. Из цифр, образующих десятичную запись N, строится наибольшее и наименьшее возможные двузначные числа (числа не могут начинаться с нуля)
2. На экран выводится разность полученных двузначных чисел.

Чему равно количество чисел N в отрезке [300,700], в результате обработки которых на экране появится число 10?

Показать ответ и решение

В этой задаче нам нужно для каждого трёхзначного числа из диапазона [300, 700] рассмотреть все возможные пары цифр, из которых можно составить двузначные числа, не начиная их с нуля. Для этого мы сначала преобразуем число N в строку, чтобы получить доступ к каждой отдельной цифре. Далее мы перебираем все пары индексов цифр (i, j), где i < j, чтобы сформировать двузначные числа из двух выбранных цифр в обеих возможных порядках: s[i] + s[j] и s[j] + s[i]. Для каждой такой пары проверяем, что первая цифра не равна ’0’ — это условие задачи, запрещающее начинать число с нуля. Из всех возможных двузначных чисел, составленных из цифр числа N, выбираем наибольшее и наименьшее. Затем вычисляем их разность и проверяем, равна ли она 10. Если равна — увеличиваем счётчик. В конце выводим общее количество таких чисел N, для которых разность полученных двузначных чисел равна 10.

c = 0  # Счётчик чисел, удовлетворяющих условию
for n in range(300, 701):  # Перебор всех трёхзначных чисел от 300 до 700 включительно
    s = str(n)  # Преобразуем число в строку для удобного доступа к цифрам
    mn = 10**10  # Инициализируем минимум очень большим числом для последующего поиска минимального двузначного числа
    mx = -10**9  # Инициализируем максимум очень маленьким числом для последующего поиска максимального двузначного числа
    for i in range(len(s)):  # Перебираем первую цифру пары
        for j in range(i+1, len(s)):  # Перебираем вторую цифру пары, чтобы избежать повторений и порядок соблюсти
            if s[i] != ’0’:  # Проверяем, что первая цифра двузначного числа не равна нулю (условие задачи)
                val = int(s[i] + s[j])  # Формируем двузначное число из цифр s[i] и s[j]
                mx = max(val, mx)  # Обновляем максимум, если текущее число больше
                mn = min(val, mn)  # Обновляем минимум, если текущее число меньше
            if s[j] != ’0’:  # Аналогично проверяем вторую возможную пару с другой первой цифрой
                val = int(s[j] + s[i])  # Формируем двузначное число из цифр s[j] и s[i]
                mx = max(val, mx)  # Обновляем максимум
                mn = min(val, mn)  # Обновляем минимум
    if mx - mn == 10:  # Проверяем, равна ли разность максимума и минимума десяти
        c += 1  # Если да, увеличиваем счётчик подходящих чисел
print(c)  # Выводим количество таких чисел

Ответ: 24
Рулетка
Вы можете получить скидку в рулетке!