13.03.2026

Являются ли цифры натурального числа строго возрастающими. Решение на языке Python

Задача: Напишите программу, которая проверяет, являются ли цифры натурального числа строго возрастающими. Это означает, что каждая следующая цифра (при чтении числа слева направо) должна быть больше предыдущей. Например, число 123 подходит, а 321 или 122 — нет. Программа должна вывести «да», если условие выполняется, и «нет» в противном случае.

В этой публикации мы подробно разберём код, который решает задачу о строго возрастающих цифрах числа. Шаг за шагом разберём, как работает программа, и рассмотрим примеры её выполнения.

Программа решения на языке Python

n = int(input('Введите число:'))
k = 0
j = 0
m = 10
while n > 0:
    j += 1
    c = n % 10
    if c < m:
        k += 1
    m = c 
    n = n // 10
    
if k == j:
    print('да')
else:
    print('нет')

Как работает программа

1. Ввод числа

Пользователь вводит целое число. Оно сохраняется в переменной n. Предполагается, что число натуральное.

2. Инициализация переменных

  • k = 0 — счётчик, который будет увеличиваться каждый раз, когда очередная цифра оказывается меньше предыдущей (предыдущая цифра — та, что была обработана раньше, то есть стоящая справа).

  • j = 0 — счётчик количества цифр в числе.

  • m = 10 — переменная, которая будет хранить предыдущую цифру. Почему 10? Потому что цифры от 0 до 9, и 10 гарантированно больше любой из них. Это позволяет корректно обработать первую цифру.

3. Цикл обработки цифр

Цикл while n > 0: выполняется, пока в числе остаются цифры. На каждой итерации:

  • j += 1 — увеличиваем счётчик цифр.

  • c = n % 10 — берём последнюю цифру числа (остаток от деления на 10).

  • if c < m: — сравниваем текущую цифру с предыдущей (той, что была справа). Если текущая меньше — значит, порядок нарушен? Нет, давайте разбираться внимательно.

Мы идём по числу справа налево. Например, число 123. Последняя цифра — 3, затем 2, затем 1. Чтобы цифры слева направо возрастали (1 < 2 < 3), при движении справа налево они должны убывать (3 > 2 > 1). То есть каждая следующая (при движении справа налево) цифра должна быть меньше предыдущей. Именно это проверяет условие c < m — текущая цифра (которая левее) меньше предыдущей (которая правее)? Если да, то всё идёт правильно.

  • k += 1 — если условие выполняется, увеличиваем счётчик правильных соотношений.

  • m = c — обновляем «предыдущую» цифру на текущую для следующей итерации.

  • n = n // 10 — отбрасываем последнюю цифру числа (целочисленное деление на 10).

4. Проверка результата

После окончания цикла у нас есть:

  • j — количество цифр.

  • k — количество раз, когда текущая цифра оказалась меньше предыдущей (при движении справа налево).

Если все цифры строго возрастают слева направо, то при движении справа налево каждая следующая цифра будет меньше предыдущей, и таких случаев будет ровно столько же, сколько цифр? Но давайте посчитаем: для числа из j цифр сравнений будет j-1 (первая цифра не с чем сравнивать). Однако в коде k увеличивается на каждой итерации, включая первую? На первой итерации m = 10, и условие c < 10 всегда истинно, поэтому k увеличится. Значит, k всегда будет включать и эту «лишнюю» единицу. Поэтому после цикла k будет равно j только в том случае, если на всех последующих сравнениях условие тоже выполнялось. Фактически k равно количеству цифр, для которых выполняется c < предыдущая_цифра, а предыдущая для первой цифры — 10, что даёт истину. Таким образом, если все сравнения были истинны (то есть цифры действительно убывают справа налево), то k == j.

Если хотя бы одно сравнение ложно, то k будет меньше j, и программа выведет «нет».

Примеры работы

Пример 1: число 123

  • Инициализация: n=123, k=0, j=0, m=10

  • Итерация 1: c=3, 3<10 → k=1, m=3, n=12, j=1

  • Итерация 2: c=2, 2<3 → k=2, m=2, n=1, j=2

  • Итерация 3: c=1, 1<2 → k=3, m=1, n=0, j=3
    Цикл завершён. k=3, j=3 → выводится «да». Всё верно.

Пример 2: число 321

  • n=321

  • Итерация 1: c=1, 1<10 → k=1, m=1, j=1, n=32

  • Итерация 2: c=2, 2<1? Нет → k остаётся 1, m=2, j=2, n=3

  • Итерация 3: c=3, 3<2? Нет → k=1, m=3, j=3, n=0
    k=1, j=3 → выводится «нет». Правильно, цифры убывают.

Пример 3: число 122

  • n=122

  • Итерация 1: c=2, 2<10 → k=1, m=2, j=1, n=12

  • Итерация 2: c=2, 2<2? Нет → k=1, m=2, j=2, n=1

  • Итерация 3: c=1, 1<2? Да → k=2, m=1, j=3, n=0
    k=2, j=3 → выводится «нет». Цифры нестрого возрастают (есть повтор), поэтому ответ «нет».

Пример 4: однозначное число, например 5

  • n=5

  • Итерация 1: c=5, 5<10 → k=1, m=5, j=1, n=0
    k=1, j=1 → выводится «да». Однозначное число считается удовлетворяющим условию (тривиально).

Выводы

Мы разобрали код, который проверяет, являются ли цифры числа строго возрастающими. Ключевая идея — обработка числа справа налево и сравнение с предыдущей цифрой. Понимание таких алгоритмов помогает развить навыки работы с циклами и арифметическими операциями над числами. Попробуйте самостоятельно модифицировать программу для проверки строго убывающих цифр или для случая, когда допустимы равные цифры.

06.03.2026

Решение задач на цикл while в Python для 8 класса. Подробный разбор

Цикл while (цикл с предусловием) — одна из базовых конструкций в программировании, которую проходят в 8 классе на уроках информатики. Он позволяет выполнять блок кода снова и снова, пока условие остается истинным (True).

Многие ученики путаются, когда нужно использовать for, а когда while. Главное правило: while используется, когда мы заранее не знаем, сколько раз циклу нужно будет выполниться.

В этой публикации мы подробно разберем конкретную задачу, которая часто встречается в школьной программе, и научимся правильно применять цикл while в Python.

Теория: Как работает while?

Прежде чем перейти к задаче, вспомним синтаксис:

python
while условие:
    # действие 1
    # действие 2
    # ... (тело цикла)
  • Условие — это логическое выражение (например, x < 10 или a != 0).

  • Тело цикла — это команды, которые будут повторяться, пока условие истинно.

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

Разбор задачи: Ввод чисел до нуля

Это классическая задача для 8 класса, которая отлично иллюстрирует суть цикла while.

Условие задачи:

Написать программу, которая считывает целые числа с клавиатуры. Если число четное, программа должна вывести его на экран. Как только пользователь введет число 0, программа должна завершить работу и вывести сообщение "Программа остановлена".

Почему здесь подходит while?

Мы не знаем, сколько чисел введет пользователь. Он может ввести 5 чисел, а может 100. Условие остановки — ввод нуля. Это идеальный случай для цикла с предусловием.

Шаг 1: Разработка алгоритма

  1. Начало.

  2. Запросить у пользователя число (первое).

  3. Проверка: Пока число не равно 0, делать следующее:

    • Если число четное (делится на 2 без остатка), то вывести его.

    • Снова запросить у пользователя число (самое важное!).

  4. Если число равно 0, выйти из цикла.

  5. Вывести сообщение о завершении.

  6. Конец.

Шаг 2: Написание кода на Python

Давайте реализуем этот алгоритм. Обратите внимание, что запрос числа находится в двух местах: перед циклом (чтобы было что проверять в первый раз) и в конце тела цикла (чтобы ввести очередное число).

python
# Информатика, 8 класс: пример использования цикла while
print("Вводите числа. Для остановки введите 0.")
# Запрашиваем первое число
number = int(input("Введите число: "))
# Запускаем цикл: пока number не равен 0
while number != 0:
    # Проверяем четность
    if number % 2 == 0:
        # Выводим четное число
        print(f"Четное число: {number}")
    # СНОВА запрашиваем число. Это ключевой момент!
    # Если забыть эту строку, условие никогда не изменится, и цикл станет бесконечным.
    number = int(input("Введите число: "))
# Как только number стал равен 0, программа идет сюда:
print("Программа остановлена. Вы ввели 0.")

Шаг 3: Проверка работы программы (Тестирование)

Запустим программу и введем несколько чисел (то, что вводит пользователь, выделено жирным для наглядности):

Вводите числа. Для остановки введите 0.
Введите число: 5 (не четное -> ничего не выводим)
Введите число: 8 (четное -> выводим)
Четное число: 8
Введите число: 12 (четное -> выводим)
Четное число: 12
Введите число: 7 (не четное -> ничего не выводим)
Введите число: 0 (условие while 0 != 0? Ложь. Цикл завершен)
Программа остановлена. Вы ввели 0.

Программа работает именно так, как требуется в задаче.

Типичные ошибки новичков (8 класс)

Разбирая задачи на цикл while на уроках информатики, ученики часто допускают одни и те же ошибки. Запомни их, чтобы не терять баллы:

  1. Забыли изменить переменную в теле цикла.

    • Ошибка: В коде выше забыть написать вторую строчку number = int(input(...)).

    • Результат: Если первое число не 0, программа начнет выводить его бесконечно (или четное число бесконечно), так как значение number не меняется. Программа "зависнет".

  2. Путаница с else.

    • В цикле while в Python тоже может быть блок else, который выполняется, если выход из цикла произошел не по break, а естественным путем.

Заключение

Цикл while в Python — мощный инструмент для решения задач, где количество шагов заранее неизвестно. Мы разобрали простую, но показательную задачу, которая часто встречается на уроках информатики в 8 классе.

Главные выводы:

  • Используйте while, когда не знаешь точного числа повторений.

  • Всегда следите за тем, чтобы условие цикла когда-нибудь стало ложным.

  • Не забывайте менять переменные внутри тела цикла.

Попробуйте модифицировать задачу самостоятельно: например, сделать подсчет суммы введенных чисел или подсчет количества четных чисел. Это поможет лучше закрепить материал.

19.11.2025

Задание 25 (ЕГЭ по информатике) поиск чисел, которые являются степенью простого числа с натуральным показателем степени, большим 1

 Задача (№ 25, ЕГЭ по информатике)

Напишите программу, которая перебирает целые числа, большие 700 000, в порядке возрастания и ищет среди них такие, которые являются степенью простого числа с натуральным показателем степени, большим 1.
В ответе в первом столбце таблицы запишите первые 5 найденных чисел в порядке возрастания, а во втором столбце - для каждого из чисел соответствующие им простое число.

Например, число 27 = 33

Количество строк в таблице для ответа избыточно.

Алгоритм решения

  1. Перебираем числа, начиная с 700 001.

  2. Для каждого числа находим его разложение на простые множители с учётом кратности (функция f(n)).

  3. Проверяем два условия:

    • Количество множителей в разложении больше 1 (показатель степени > 1).

    • Все множители одинаковые (число является степенью одного простого числа).

  4. Как только находим 5 таких чисел, завершаем перебор.

Программа решения задачи на языке Python

def f(n):
    d = []
    for k in range(2, int(n**0.5) + 1):
        while n % k == 0:
            d.append(k)
            n //= k
    if n > 1:
        d.append(n)
    return d

k = 0
x = 700001
while k != 5:
    y = f(x)
    y1 = set(y)
    if len(y) > 1 and len(y1) == 1:
        print(x, y[0])
        k += 1
    x += 1
Пояснения
  • Функция f(n) возвращает список простых делителей числа n (например, для числа 72 → [2, 2, 2, 3, 3]).

  • y1 = set(y) оставляет только уникальные делители. Если все делители одинаковые, длина множества будет равна 1.

  • Условие len(y) > 1 гарантирует, что показатель степени больше 1.

Результат выполнения программы

703921 839

704969 89

707281 29

727609 853

734449 857


03.07.2025

ЕГЭ по информатике. Задание 25. Поиск чисел, представленных в виде произведения ровно двух простых множителей, не обязательно различных

Задача. Напишите программу, которая перебирает целые числа, большие 6 651 220, в порядке возрастания и ищет среди них числа, представленные в виде произведения ровно двух простых множителей, не обязательно различных, каждый из которых содержит в своей записи ровно одну цифру 2.

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

Источник: kompege.ru

Пример числа:

Число 6651241 можно разложить на 2579 × 2579, и оба этих множителя — простые числа, содержащие ровно одну цифру "2".

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

def f(n):

    a = []

    for k in range(2,int(n**0.5)+1):

        while n%k==0:

            a.append(k)

            n//=k

    if n>1:

        a.append(n)

    return a

  • В цикле для k от 2 до √n: пока число n делится на k, добавляем число k в список множителей.

  • После разложения, если n > 1, значит, оно простое и его тоже добавляем в список.

Проверяем работу функции

print(f(12)) # вывод [2, 2, 3]

print(f(424)) # вывод [2, 2, 2, 53]

print(f(6889)) # вывод [83, 83]

print(f(17)) # вывод [17]

Решаем задачу

p = 0  # Счётчик найденных чисел

x = 6_651_220 + 1  # Начинаем с числа после 6 651 220

while p != 5:

    y = f(x) # Получаем список множителей для числа x

    if len(y) == 2:  # Если у числа x ровно два простых множителя

        # Проверяем, что в каждом множителе ровно одна цифра "2"

        if str(y[0]).count('2') == 1 and str(y[1]).count('2') == 1:

            print(x, max(y))  # Выводим число и наибольший множитель

            p += 1

    x += 1  # Переходим к следующему числу

Вывод:

6651241 2579

6651262 3325631

6651286 3325643

6651314 3325657

6651347 289189

03.01.2025

Идет невисокосный год. Сколько дней до Нового года?

 Задача. Пусть идет невисокосный год. Сколько дней до Нового года? 

Сохраним количество дней в каждом месяце в списке days.

Применим срезы по-новогоднему :)

Программа на Python

print('Год не високосный. Сколько дней до Нового года? Введите текущие')

m = int(input('месяц: '))

d = int(input('день: '))

days = [31,28,31,30,31,30,31,31,30,31,30,31]

print('До Нового года: ',sum(days[m-1:])- d + 1,' дн.')

Еще бы выводить сообщение об ошибочных данных, если пользователь введет не то, что нужно (допишем еще)

Запуск на текущий момент 

Год не високосный. Сколько дней до Нового года? Введите текущие

месяц: 1

день: 3

До Нового года:  363  дн.