№5

Автомат получает на вход четырёхзначное число. По этому числу строится новое число по следующим правилам. 1.Складываются отдельно первая и вторая цифры, вторая и третья цифры, а также третья и четвёртая цифры. 2.Из полученных трёх чисел выбираются два наибольших и записываются друг за другом в порядке неубывания без разделителей. Пример. Исходное число: 9575. Суммы: 9 + 5 = 14; 5 + 7 = 12; 7 + 5 = 12. Наибольшие суммы: 14, 12. Результат: 1214. Укажите наибольшее число, при обработке которого автомат выдаёт результат 1517.
Источник: ссылка

Задание решается довольно просто. Всё, что нам необходимо – разбить число в виде строки на отдельные цифры в виде целых.

Обратите внимание на то, что идентификаторы в Python (как и во многих других языках программирования) начинаются с нуля, то есть “первая и вторая цифры” будут идти под порядковыми номерами 0 и 1 соответственно.
#Задание 5
for i in range(10**3, 10**4): #Перебор всех 4-значных чисел
    s = str(i) #Переводим это число в строку

    a = int(s[0]) + int(s[1]) #Первое складываем со вторым (КАК ЧИСЛА!)
    b = int(s[1]) + int(s[2]) #Второе с третьим
    c  = int(s[2]) + int(s[3]) #Третье с четвёртым

    mas = [a, b, c] #Создём массив и сортируем элементы в нём
    mas.sort() #в порядке возрастания

    res = str(mas[1]) + str(mas[2]) #2 самых больших - последнее и предпоследнее
    #в отсортированном массиве

    if res == '1517':
        print(i)
Алгоритм получает на вход натуральное число N>1 и строит по нему новое число R следующим образом: 1.Вычисляется сумма чётных цифр в десятичной записи числа N. Если чётных цифр в записи нет, сумма считается равной нулю. 2.Вычисляется сумма цифр, стоящих на чётных местах в десятичной записи числа N без ведущих нулей. Места отсчитываются слева направо (от старших разрядов к младшим, начиная с единицы). Если число однозначное (цифр на чётных местах нет), сумма считается равной нулю. 3.Результатом работы алгоритма становится модуль разности полученных двух сумм. При каком наименьшем N в результате работы алгоритма получится R=13?
Источник: ссылка

Для решения этого задания необходимо правильно понять его смысл и отличить формулировки “четное число” и “число, стоящее на четном месте”

Оператор % означает остаток от деления, иными словами запись a % 2 == 0 является проверкой на четность, так как мы проверяем, поделится ли число на 2 без остатка?
#Задание 5
for i in range(2, 10000):
    s = str(i)
    #Сумма четная и сумма нечетная
    sme = smn = 0
    for j in range(len(s)):
        a = int(s[j])
        #Если само число четное
        if a % 2 == 0:
            sme += a
    for j in range(len(s)):
        #Если позиция числа нечетная
        if j % 2 != 0:
            smn += int(s[j])
    #Есди модуль разности равен 13
    if abs(sme - smn) == 13:
        print(i)
        break
На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом. 1.Строится двоичная запись числа N. 2.К этой записи дописываются справа ещё два разряда по следующему правилу: а)складываются все цифры двоичной записи, и остаток от деления суммы на 2 дописывается в конец числа (справа). б)над этой записью производятся те же действия— справа дописывается остаток от деления суммы цифр на 2. Полученная таким образом запись (в ней на два разряда больше, чем в записи исходного числа N) является двоичной записью искомого числа R. Укажите такое наименьшее число N, для которого результат работы алгоритма больше 97. В ответе это число запишите в десятичной системе счисления.
Источник: ссылка

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

Запись s = bin(i)[2:] отбрасывает первые 2 символа, так как то, что вернёт функция bin() содержит на первых двух позициях некоторую информацию о байтах, которая нам не нужна.
#Задание 5
#0 НЕ является натуральным числом
for i in range(1, 1000):
    s = bin(i)[2:]
    #Первый раз
    sm = s.count('1')
    s += str(sm % 2)
    #Второй раз
    sm = s.count('1')
    s += str(sm % 2)
    if int(s, 2) > 97:
        print(i)
        break