Задача 5

Десятичное преобразование

Ссылка на задачу: https://inf-ege.sdamgia.ru/problem?id=11262

Автомат получает на вход четырёхзначное число. По этому числу строится новое число по следующим правилам.

1.  Складываются отдельно первая и вторая цифры, вторая и третья цифры, а также третья и четвёртая цифры.

2.  Из полученных трёх чисел выбираются два наибольших и записываются друг за другом в порядке неубывания без разделителей.

Пример. Исходное число: 9575. Суммы: 9 + 5 = 14; 5 + 7 = 12; 7 + 5 = 12. Наибольшие суммы: 14, 12. Результат: 1214.

Укажите наименьшее число, при обработке которого автомат выдаёт результат 1517.


for i in range(1000,10000):
    s = str(i)

    s1 = int(s[0]) + int(s[1])
    s2 = int(s[1]) + int(s[2])
    s3 = int(s[2]) + int(s[3])

    a = [s1,s2,s3]
    sorted(a)

    s_new = str(a[1]) + str(a[2])
    if s_new == '1517':
        print(i)

Ответ 1698

Двоичное преобразование

Ссылка на задачу: https://inf-ege.sdamgia.ru/problem?id=18708

На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом.

1.  Строится двоичная запись числа N.

2.  К этой записи дописываются справа ещё два разряда по следующему правилу:

а)  складываются все цифры двоичной записи, и остаток от деления суммы на 2 дописывается в конец числа (справа). Например, запись 11100 преобразуется в запись 111001;

б)  над этой записью производятся те же действия  — справа дописывается остаток от деления суммы цифр на 2.

Полученная таким образом запись (в ней на два разряда больше, чем в записи исходного числа N) является двоичной записью искомого числа R.

Укажите минимальное число N, после обработки которого с помощью этого алгоритма получается число, большее, чем 85. В ответе запишите это число в десятичной системе счисления.


for i in range(1,100):
    a = bin(i)[2:]
    s = str(a)

    k = 0
    for s1 in s:
        k = k + int(s1)        
    s1 = str(k%2)
    s = s + s1
        
    k = 0
    for s1 in s:
        k = k + int(s1)        
    s1 = str(k%2)
    s = s + s1

    r = int(s,2)

    if r > 85:
        print(i)

Ответ
21

Сложная 5 задача:

Автомат обрабатывает натуральное число N по следующему алгоритму.

1.  Строится двоичная запись числа N.

2.  Удаляется первая слева единица и все следующие непосредственно за ней нули. Если после этого в числе не остаётся цифр, результат этого действия считается равным нулю.

3.  Полученное число переводится в десятичную запись.

4.  Новое число вычитается из исходного, полученная разность выводится на экран.

Пример. Дано число N  =  11. Алгоритм работает следующим образом.

1.  Двоичная запись числа N: 1011.

2.  Удаляется первая единица и следующий за ней ноль: 11.

3.  Десятичное значение полученного числа 3.

4.  На экран выводится число 11 – 3  =  8.

Сколько разных значений будет показано на экране автомата при последовательном вводе всех натуральных чисел от 100 до 3000?


m = []
for a in range(100,3001):
    s = ''
    
    aa = a
    while aa != 0:
        s = s + str(aa%2)
        aa = aa // 2
    s = s[::-1]
    
    s1 = ''
    f1 = 0
    f2 = 0
    for i in s:
        if f1 == 0:
            f1 = 1
            continue
            
        if i == '0' and f2 == 0:
            pass
        else:
            s1 = s1 + i
            f2 = 1

    if s1 == '':
        b = 0
    else:    
        b = int(s1,2)
    
    c = a - b
    
    m.append(c)
n = set(m)
print(n)