На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом.
1) Строится двоичная запись числа N.
2) Далее если исходное число четное, то справа к построенной двоичной записи числа N приписывается 0, если нечетное, то приписывается 1.
3) Далее полученная на втором шаге алгоритма запись обрабатывается по следующему правилу:
а) если количество единиц в двоичной записи кратно трем, то в этой записи два левых разряда заменяются на 11; б) если количество единиц в двоичной записи некратно трем, то в этой записи два левых разряда заменяются на 10.
Полученная таким образом запись является двоичной записью искомого числа R.
Например, для исходного числа 610 = 1102 результатом является число 10002 = 810, а для исходного числа 310 = 112, результатом является число 1112 = 710.
Укажите минимальноечисло N, после обработки которого с помощью этого алгоритма получается число R, не меньшее чем 26. В ответе запишите это число в десятичной системе счисления.
Решение и ответ
for x in range(1,30): #перебираем х N=bin(x)[2:] #получаем двоичную запись, убираем первые 2 символа 0b if N[-1]== '0': # преобразование 2 шага N = N + '0' else: N = N + '1'
print(x, int(R,2)) # переводим R в десятичную систему счисления
Из таблицы значений видим, что наименьшее N = 9 для R = 27
Ответ: 9
Задание 5. Восьмибитная двоичная система счисления
Автомат обрабатывает натуральное число N(1≤N≤255)N(1≤N≤255) по следующему алгоритму:
Строится восьмибитная двоичная запись числа N.
Удаляется последняя цифра двоичной записи.
Запись «переворачивается», то есть читается справа налево.
Полученное число переводится в десятичную запись и выводится на экран.
Каково наибольшее число, меньшее 100, которое после обработки автоматом не изменится?
Решение и ответ
for N in range (1, 100): N1 = '{0:08b}'.format(N) N2 = N1[:-1] N3 = N2[::-1] r = int(N3, 2) if N == r: print (N)
Ответ: 90
Задание 5. Троичная система счисления
На вход алгоритма подаётся натуральное число
N. Алгоритм строит по нему новое число R таким образом:
Строится троичная запись числа N
В полученной записи вычисляется количество цифр 2. Это число переводится в троичный вид и дописывается справа
В полученной записи вычисляется количество цифр 1. Это число переводится в троичный вид и дописывается справа
В полученной записи вычисляется количество цифр 0. Это число переводится в троичный вид и дописывается справа
Полученная таким образом запись является троичной записью искомого числа R.
Например, для исходного числа 55 алгоритм пройдет через такие шаги:
123→1213→12123→121203=150
Укажите максимальное число N, после обработки которого с помощью этого алгоритма получается числоR, меньшее 1000. В ответе запишите это число в десятичной системе счисления.
Решение и ответ
def tr(x): # функция для перевода в троичную сс if x == 0: return '0' # не забываем про 0 y = '' while x > 0: y = str(x % 3) + y x = x //3 return y # возвращаем строку в троичной системе счисления
for N in range(1,100): # перебираем N s = tr(N) # переводим в троичную запись s += tr(s.count('2')) # добавляем к числу справа количество двоек в троичной записи s += tr(s.count('1')) #добавляем к числу справа количество единиц в троичной записи s += tr(s.count('0')) #добавляем к числу справа количество нулей в троичной записи r = int(s, 3) # переводим в десятичную сс print (N, r)
Ответ: 35
Задание 5. Четверичная система счисления
На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом.
Строится четверичная запись числа N.
Далее эта запись обрабатывается по следующему правилу: a) если число N делится на 4, то к этой записи справа дописываются две последние четверичные цифры б) если число N на 4 не делится, то вычисляется сумма цифр полученной четверичной записи, эта сумма умножается на 4, переводится в четверичную систему счисления и дописывается в конец числа
Полученная таким образом запись является четверичной записью искомого числа R.
Результат переводится в десятичную систему и выводится на экран.
Укажите минимальное чётное число R, большее 211, которое кратно трём и может быть получено с помощью описанного алгоритма.
В ответе запишите это число в десятичной системе счисления.
Решение и ответ
def cht(x): # функция для перевода в четверичную сс
if x == 0: return '0' y = '' while x > 0: y = str(x % 4) + y x = x // 4
return y # возвращаем строку в четверичной системе счисления
for N in range(1,100): # перебираем N s = cht(N) # переводим в четверичную запись if N % 4 == 0: s += s[-2:] else: s += cht(4*sum(map(int,s))) #добавляем к числу справа сумму цифр, умноженную на 4 в четверичной сс r = int(s, 4) # переводим в десятичную сс if r > 211 and r % 6 == 0: print (N, r)
Ответ: 300
Задание 5. Пятиричная система счисления
На вход алгоритма подаётся натуральное число N > 100. Алгоритм строит по нему новое число R следующим образом.
Строится пятеричная запись числа N.
Далее эта запись обрабатывается по следующему правилу: а) если число N чётное, то к этой записи справа дописывается сумма двух последних пятеричных цифр, переведенная в пятеричную систему; б) если число N нечётное, то в начало записи дописывается последняя цифра этой записи. Полученная таким образом запись является пятеричной записью искомого числа R.
Результат переводится в десятичную систему и выводится на экран.
Примеры: Для N=316: 316→22315→22314→1584 Для N=317: 317→22325→22232→1567
Укажите минимальное число N, после обработки которого с помощью этого алгоритма получается число R, большее 1000.
Решение и ответ
def pt(x): # функция для перевода в пятиричную сс
if x == 0: return '0' # не забываем про 0 y = '' while x > 0: y = str(x % 5) + y x = x // 5 return y # возвращаем строку в пятиричной системе счисления
for N in range(101, 200): # перебираем N s = pt(N) # переводим в пятиричную запись if N % 2 == 0: s += pt(int(s[-1])+int(s[-2])) # добавляем к числу справа сумму последних двух цифр числа в пятиричной сс
else: s = s[-1] + s #добавляем к числу слева последнюю цифру r = int(s, 5) # переводим в десятичную сс if r > 1000: print (N) break
Ответ: 114
Задание 5. Семеричная система счисления
На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R:
Строится семеричная запись числа N.
Далее эта запись обрабатывается так: а) если число N делится на 7, к этой записи дописываются две последние семеричные цифры б) если число N на 7 не делится, остаток от деления умножается на 2, переводится в семеричную запись и дописывается в конец числа. Таким образом получается семеричная запись искомого числа R.
Результат переводится в десятичную систему и выводится на экран.
Например, для исходного числа 6=67 результат - число 6157 = 306, а для исходного числа 7 = 107- число 10107 = 350.
Укажите максимальное число N, после обработки которого с помощью этого алгоритма получается число R, меньшее 220.
Решение и ответ
def sm(x): # функция для перевода в семеричную сс y = '' while x > 0: y = str(x % 7) + y x = x // 7 return y # возвращаем строку в семеричной системе счисления
for N in range(1,100): # перебираем N s = sm(N) # переводим в семеричную запись if N % 7 == 0: s += s[-2:]# добавляем две последние цифры else: s += sm(2 * (N % 7)) #добавляем к числу справа удвоенный остаток от деления на 7 в семеричной сс r = int (s, 7) if r < 220: print (N, r)
Ответ: 30
Задание 5. Двенадцатиричная система счисления
На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом.
Строится запись числа N в системе счисления с основанием 12.
Далее эта запись обрабатывается по следующему правилу:
а) если число N делится на 4, то слева к нему приписывается «2», а справа «64»; б) если число N на 4 не делится, то в конец числа дописывается его максимальная цифра в системе счисления с основанием 12.
Полученная таким образом запись является двенадцатеричной записью искомого числа R.
Результат переводится в десятичную систему и выводится на экран.
Например, для исходного числа 11=B12 результатом является число BB12=143, а для исходного числа 12=1012 это число 2106412=43276.
Укажите минимальное число R, большее 1799, которое может быть получено с помощью описанного алгоритма. В ответе запишите это число в десятичной системе счисления.
Решение и ответ
def dv(x): # функция для перевода в двенадцатиричную сс if x == 0: return '0' # не забываем про 0 y = '' while x > 0: y = str(x % 12) + y x = x // 12 return y # возвращаем строку в двенадцатиричной системе счисления
min_r = 1000000 #потолок для r
for N in range(1,150): # перебираем N, если брать диапазон до 100, не получим верный ответ s = dv(N) # переводим в двенадцатиричную запись if N % 4 == 0: s = '2' + s + '64' else: m = [int(i) for i in s] s += dv(max(m)) #добавляем к числу справа максимальную цифру в сс с основанием 12 r = int (s, 12) if r> 1799: min_r = min(min_r, r)