Задача к ЕГЭ по информатике на тему «действия над цифрами числа» №1

Автомат получает на вход четырехзначное число k  . По этому числу строится новое число M  по таким правилам:

   Повторяется n  раз:

  1. Последняя цифра числа увеличивается на единицу;
  2. Последняя цифра числа переставляется в начало числа;

Вывод получившегося числа M  .

Примечание: В процессе работы алгоритма не должно происходить ситуаций переполнения (когда последняя цифра числа 9  и она увеличивается на единицу). Если происходит переполнение, то число M  считается ошибочным (недействительным) при данном числе k  .

Пример: при исходных числах k = 3672  и n = 3  автомат выведет число 7833  .

Укажите наименьшее число k  такое, что при n =  6  сумма цифр числа M  равна 31  , и третья цифра числа M  равна 8  .

Решение руками:

Запишем исходное число k  в таком виде: x1 : x2 : x3 : x4   .

Если n =  6  , то новое число будет представлено в виде (x3 + 2 ) : (x4 + 2) : (x1 + 1) : (x2 + 1 )  . Заметим, что сумма цифр нового числа M  на n  больше чем сумма цифр исходного числа k  . Тогда сумма цифр исходного числа k  есть 25  . Также заметим, что если на третьей позиции в числе M  стоит 8  , то верно x1 + 1 =  8  , откуда x1 =  7  ; Значит, необходимо подобрать такие x2,x3,x4   , чтобы их сумма была равна 18  , и число k  было минимально при этом x  < 9,   4  а x  ,x <  8.   2  3  Подбор можно осуществить, постепенно уменьшая x  4   , начиная с 8, и подбирая x1   и x2   под это значение x1   так, чтобы сумма была равна 18, и при это не было переполнения разрядов. Таким образом, первое значение k  , у которого x4 < 9,  а x2,x3 < 8  , и нет переполнения разрядов, будет равно 7477  (число M  = 9985  ). Так как мы перебирали снизу и ничего улучшить уже нельзя (переставить цифры, например, чтобы уменьшить), это и есть ответ.

 

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

for i in range(1000,10000):
    flag = True
    s = str(i)
    for j in range(6):
        if int(s[-1]) < 9:
            s = str(int(s) + 1)
            s = s[-1] + s[:3]
        else:
            flag = False
            break
    if sum([int(x) for x in s]) == 31 and s[2] == ’8’ and flag:
        print(i)
        break

Ответ: 7477
Оцените статью
Я решу все!