Десятичное преобразование
Ссылка на задачу: 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)
