Задание 05. Разные системы счисления

Задание 5. Двоичная система счисления

На вход алгоритма подаётся натуральное число 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'

    if N.count('1')%3 == 0: # преобразование 3 шага
        R=N.replace(N[:2],'11', 1)
    else:
        R=N.replace(N[:2],'10', 1)

    print(x, int(R,2)) # переводим R в десятичную систему счисления

Из таблицы значений видим, что наименьшее N = 9 для R = 27

Ответ9

Задание 5. Восьмибитная двоичная система счисления

Автомат обрабатывает натуральное число N(1≤N≤255)N(1N255) по следующему алгоритму:

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

  2. Удаляется последняя цифра двоичной записи.

  3. Запись «переворачивается», то есть читается справа налево.

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

Каково наибольшее число, меньшее 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 таким образом:

  1. Строится троичная запись числа N
  2. В полученной записи вычисляется количество цифр 2. Это число переводится в троичный вид и дописывается справа
  3. В полученной записи вычисляется количество цифр 1. Это число переводится в троичный вид и дописывается справа
  4. В полученной записи вычисляется количество цифр 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 следующим образом.

  1. Строится четверичная запись числа N.
  2. Далее эта запись обрабатывается по следующему правилу:
    a) если число 
    N делится на 
    4, то к этой записи справа дописываются две последние четверичные цифры
    б) если число 
    N на 
    4 не делится, то вычисляется сумма цифр полученной четверичной записи, эта сумма умножается на 
    4, переводится в четверичную систему счисления и дописывается в конец числа

Полученная таким образом запись является четверичной записью искомого числа 
R.

  1. Результат переводится в десятичную систему и выводится на экран.

Укажите минимальное чётное число 
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 следующим образом.
  1. Строится пятеричная запись числа N.
  2. Далее эта запись обрабатывается по следующему правилу:
    а) если число N чётное, то к этой записи справа дописывается сумма двух последних пятеричных цифр, переведенная в пятеричную систему;
    б) если число N нечётное, то в начало записи дописывается последняя цифра этой записи. Полученная таким образом запись является пятеричной записью искомого числа R.
  3. Результат переводится в десятичную систему и выводится на экран.

Примеры:
Для 
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:

  1. Строится семеричная запись числа N.
  2. Далее эта запись обрабатывается так:
    а) если число N делится на 7, к этой записи дописываются две последние семеричные цифры
    б) если число N на 7 не делится, остаток от деления умножается на 2, переводится в семеричную запись и дописывается в конец числа.
    Таким образом получается семеричная запись искомого числа R.
  3. Результат переводится в десятичную систему и выводится на экран.

Например, для исходного числа 6=67​ результат - число 615= 306, а для исходного числа 7 = 107- число 1010= 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 следующим образом.

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

  2. Далее эта запись обрабатывается по следующему правилу:

    а) если число N делится на 4, то слева к нему приписывается «2», а справа «64»;
    б) если число N на 4 не делится, то в конец числа дописывается его максимальная цифра в системе счисления с основанием 12.

    Полученная таким образом запись является двенадцатеричной записью искомого числа R.

  3. Результат переводится в десятичную систему и выводится на экран.

Например, для исходного числа 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)

print (min_r)

Ответ1806