Тема 5. Алгоритмы – анализ простейших алгоритмов
5.02 Запись числа в другой системе счисления
Вспоминай формулы по каждой теме
Решай новые задачи каждый день
Вдумчиво разбирай решения
ШКОЛКОВО.
Готовиться с нами - ЛЕГКО!
Подтемы раздела алгоритмы – анализ простейших алгоритмов
Решаем задачи

Ошибка.
Попробуйте повторить позже

Задача 1#75234

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

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

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

а) если целая часть среднего значения цифр в числе N больше 5, то к записи в начало дописывается 1;

б) если целая часть среднего значения цифр в числе N меньше или равно 5, то к записи в начало дописывается 2.

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

Например, для исходного числа 3410 = 2216  результатом является число 22216 = 54610  , а для исходного числа 5610 = 3816  результатом является число 23816 = 56810  .

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

Показать ответ и решение
for n in range(1,1000):
    t = hex(n)[2:]#Запись числа в шестнадцатеричной системе счисления
    avg = sum(map(int,str(n)))//len(str(n))#Среднее арифметическое значение числа N
    if avg > 5:#Если оно больше 5
        t = ’1’ + t#Слева от числа приписываем 1
    else:#Если оно меньше или равно 5
        t = ’2’ + t#Слева от числа приписываем 2
    r = int(t,16)#Перевод в 10сс из 16сс
    if r > 310 and r < 350:
        print(n)
        break

Ответ: 57

Ошибка.
Попробуйте повторить позже

Задача 2#75233

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

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

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

а) если произведение цифр записи, отличных от 0, кратно 3, то к этой записи справа дописывается 21;

б) если произведение цифр записи, отличных от 0, не кратно 3, то к этой записи справа дописывается 12.

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

Например, для исходного числа 1210 = 304  результатом является число 30214 = 20110  , а для исходного числа 510 = 114  результатом является число 11124 = 8610  .

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

Показать ответ и решение
def f(n, osn): #функция перевода числа n в сс с основанием osn
    s = ’’
    while n > 0:
        s += str(n % osn)
        n //= osn
    s = s[::-1]
    return s
a = set()
for n in range(1, 200):
    s = f(n, 4) #переводим число в четверичную систему счисления
    k = map(int,s)
    mult = 1 #произведение цифр в четверичной записи числа
    for i in k: # считаем прозведение
        if i != 0:
            mult *= i
    if mult % 3 == 0: #если произведение делится на 3 без остатка
        s += ’21’ #приписываем 21 к записи
    if mult % 3 != 0:   #если произведение не делится на 3 без остатка
        s += ’12’ #приписываем 12 к записи
    r = int(s, 4)
    if r <= 280:
        a.add(r)
print(max(a))

Ответ: 278

Ошибка.
Попробуйте повторить позже

Задача 3#75232

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

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

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

а) если число N делится на 4, то к этой записи слева дописывается 1;

б) если число N не делится на 4, то к этой записи справа дописывается 1.

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

Например, для исходного числа 1210 = 148  результатом является число 1148 = 7610  , а для исходного числа 6110 = 758  результатом является число 7518 = 48910  .

Сколько различных значений R, больших 590 и меньших 650, может быть получено с помощью полученного алгоритма? В ответе запишите это число в десятичной системе счисления.

Показать ответ и решение
a = set()
for n in range(1, 200):
    s = oct(n)[2:] #переводим число в восьмеричную систему счисления
    if n % 4 == 0: #если число делится на 4
        s = ’1’+s #дописываем слева 1
    if n % 4 != 0: #если число не делится на 4
        s = s +’1’ #дописываем справа 1
    r = int(s, 8)
    if r > 590 and r < 650:
        a.add(r)
print(len(a))

Ответ: 21

Ошибка.
Попробуйте повторить позже

Задача 4#75231

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

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

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

а) если в записи числа больше четных цифр, то складывается сумма всех четных цифр в записи числа, переводится в восьмеричную систему счисления и дописывается в конец числа;

б) если в записи числа больше нечетных цифр, то складывается сумма всех нечетных цифр в записи числа, переводится в восьмеричную систему счисления и дописывается в конец числа;

в) если в записи числа одинаковое количество четных и нечетных цифр, то складывается сумма всех четных цифр в записи числа и делится нацело на 2, затем переводится в восьмеричную систему счисления и дописывается в конец числа;

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

Например, для исходного числа 12  = 14
  10     8  результатом является число 142 = 98
   8    10  , а для исходного числа 7210 = 1108  результатом является число 11028 = 57810  .

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

Показать ответ и решение
for n in range(1,1000):
    t = oct(n)[2:]# Перевод числа в восьмеричную систему счисления
    count_even = t.count(’0’)+t.count(’2’)+t.count(’4’)+t.count(’6’)#Подсчёт чётных цифр в числе
    count_odd = t.count(’1’)+t.count(’3’)+t.count(’5’)+t.count(’7’)#Подсчёт нечётных цифр в числе
    if count_even > count_odd:#Если чётных цифр больше
        t += oct(sum([int(i) for i in t if int(i) % 2 == 0]))[2:]#Добавляем восьмеричную к числу запись суммы чётных цифр
    elif count_odd > count_even:#Если нечётных цифр больше
        t += oct(sum([int(i) for i in t if int(i) % 2 != 0]))[2:]#Добавляем к числу восьмеричную запись суммы нечётных цифр
    else:#Если количество цифр равно
        t += oct(sum([int(i) for i in t if int(i) % 2 == 0]) // 2)[2:]#Добавляем к числу восьмеричную запись суммы чётных цифр, поделенную надвое
    r = int(t,8)#Перевод в 10сс из 8сс
    if r <= 870:
        print(n)

Ответ: 108

Ошибка.
Попробуйте повторить позже

Задача 5#75230

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

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

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

а) если число N дает четный остаток при делении на 5, то складывается сумма всех цифр в пятеричной записи числа, переводится в пятеричную систему счисления и дописывается в конец числа;

б) если число N дает нечетный остаток при делении на 5, то к этой записи слева дописывается 21.

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

Например, для исходного числа 1210 = 225  результатом является число 2245 = 6410  , а для исходного числа 610 = 115  результатом является число 21115 = 28110  .

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

Показать ответ и решение
def f(n, osn): #функция перевода числа n в сс с основанием osn
    s = ’’
    while n > 0:
        s += str(n % osn)
        n //= osn
    s = s[::-1]
    return s

for n in range(1, 200):
    s = f(n, 5) #переводим число в пятеричную систему счисления
    if n % 5 == 0 or n % 5 == 2 or n % 5 == 4: #если n дает четный остаток при делении на 5
        k = sum(map(int, s)) #считаем сумму цифр в строке
        s1 = f(k, 5) #переводим в пятеричную сс
        s += s1 #приписываем полученное значение к записи
    if n % 5 == 1 or n % 5 == 3:   #если n дает нечетный остаток при делении на 5
        s = ’21’ + s #дописываем слева к пятеричной записи числа 21
    r = int(s, 5)
    if r <= 320:
        print(n)

Ответ: 60

Ошибка.
Попробуйте повторить позже

Задача 6#75229

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

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

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

а) если в троичной записи числа содержится хотя бы одна цифра 2, то к этой записи справа дописывается 0;

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

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

Например, для исходного числа 1210 = 1103  результатом является число 11013 = 3710  , а для исходного числа 510 = 123  результатом является число 1203 = 1510  .

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

Показать ответ и решение
def f(n, osn): #функция перевода числа n в сс с основанием osn
    s = ’’
    while n > 0:
        s += str(n % osn)
        n //= osn
    s = s[::-1]
    return s

a = set()
for n in range(1, 200):
    s = f(n, 3) #переводим число в троичную систему счисления
    if ’2’ in s: #если в троичной записи содержится хотя бы одна двойка
        s += ’0’ #то приписываем 0
    if ’2’ not in s:  #если в троичной записи нет двойки
        k = (n % 10)//2 #то берем последнюю цифру числа n и делим нацело на 2
        s1 = f(k,3) #переводим это число в троичную сс
        s += s1 #прибавляем к троичной записи числа
    r = int(s, 3)
    if r >= 202:
        a.add(r)
print(min(a))

Ответ: 204

Ошибка.
Попробуйте повторить позже

Задача 7#75228

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

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

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

а) если число N делится на 5, то к этой записи справа дописывается 02;

б) если число N не делится на 5, то остаток от деления умножается на 3, это произведение переводится в троичную систему счисления, от него берется две последние цифры и дописываются в конец числа.

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

Например, для исходного числа 1210 = 1103  результатом является число 110203 = 11410  , а для исходного числа 510 = 123  результатом является число 12023 = 4710  .

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

Показать ответ и решение
def f(n, osn): #функция перевода числа n в сс с основанием osn
    s = ’’
    while n > 0:
        s += str(n % osn)
        n //= osn
    s = s[::-1]
    return s

for n in range(1, 300):
    s = f(n, 3) #переводим число в троичную систему счисления
    if n % 5 == 0: #если число n делится на 5
        s += ’02’ #то приписываем 02
    if n % 5 != 0:  #если число n не делится на 5
        k = (n % 5) * 3 #то считаем остаток от деления на 5, умноженный на 3
        s1 = f(k,3) #переводим это число в троичную сс
        s += s1[len(s1)-2:] #прибавляем последние две цифры этого числа к троичной записи числа
    r = int(s, 3)
    if r == 192:
        print(n)
        break

Ответ: 21

Ошибка.
Попробуйте повторить позже

Задача 8#75227

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

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

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

а) если число N дает остаток 0 или 1 при делении на 3, то к этой записи справа дописываются две первые цифры двоичной записи числа N;

б) если число N дает остаток 2 при делении на 3, то считается количество нулей в этой записи, это количество переводится в двоичную запись и дописывается в конец числа.

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

Например, для исходного числа 1210 = 11002  результатом является число 1100112 = 5110  , а для исходного числа 510 = 1012  результатом является число 10112 = 1110  .

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

Показать ответ и решение
for n in range(1, 150):
    s = bin(n)[2:] #переводим число в двоичную систему счисления
    if n % 3 == 0 or n % 3 == 1: #если число n дает остаток 0 или 1 при делении на 3
        s += s[0:2] #то приписываем две единицы двоичной записи
    if n % 3 == 2:  #если число n дает остаток 2 при делении на 3
        k = s.count(’0’) #то считаем количество нулей в числе
        s1 = bin(k)[2:] #переводим это количество в двоичную сс
        s += s1 #прибавляем это число к двоичной записи числа
    r = int(s, 2)
    if r > 122:
        print(n)

Ответ: 30

Ошибка.
Попробуйте повторить позже

Задача 9#75226

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

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

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

а) если число N четное, то к этой записи справа от числа дописываются две единицы;

б) если число N нечетное, то все единицы в двоичной записи числа складываются, эта сумма переводится в двоичную запись и дописывается в конец числа.

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

Например, для исходного числа 1210 = 11002  результатом является число 1100112 = 5110  , а для исходного числа 510 = 1012  результатом является число 101102 = 2210  .

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

Показать ответ и решение
a = set()
for n in range(1, 150):
    s = bin(n)[2:] #переводим число в двоичную систему счисления
    if n % 2 == 0: #если число n  четное
        s += ’11’ #то приписываем две единицы
    if n % 2 != 0: #если число n нечетное
        k = s.count(’1’) #то считаем количество единиц в числе
        s1 = bin(k)[2:] #переводим это количество в двоичную сс
        s += s1 #прибавляем это число к двоичной записи числа
    r = int(s, 2)
    if r > 140:
        a.add(r)
print(min(a))

Ответ: 143

Ошибка.
Попробуйте повторить позже

Задача 10#75225

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

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

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

а) если число N делится на 4, то к этой записи справа от числа дописываются две последние двоичные цифры;

б) если число N на 4 не делится, то остаток от деления умножается на 3, переводится в двоичную запись и дописывается в конец числа.

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

Например, для исходного числа 1210 = 11002  результатом является число 1100002 = 4810  , а для исходного числа 510 = 1012  результатом является число 101112 = 2310  .

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

Показать ответ и решение
a = set()
for n in range(1, 150):
    s = bin(n)[2:] #переводим число в двоичную систему счисления
    if n % 4 == 0: #если число n делится на 4, то приписываем две последние цифры s(двоичного числа) к числу s
        s += s[len(s) - 2:]
    if n % 4 != 0: #если число не делится на 4
        k = (n % 4) * 3 #то умножаем остаток от деления исходного числа на 4
        s1 = bin(k)[2:] #переводим остаток в двоичную сс
        s += s1 #прибавляем этот остаток к двоичной записи числа
    r = int(s, 2)
    if r > 76:
        a.add(r)
print(min(a))

Ответ: 80

Ошибка.
Попробуйте повторить позже

Задача 11#72428

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

  1. Строится троичная запись числа N.
  2. К этой записи дописывается справа бит по определённым правилам: 0, если в троичном коде числа N  сумма количества единиц и двоек чётна, и 1, если сумма количества единиц и двоек нечётна.
  3. К полученному результату дописывается ещё один бит по тем же правилам.

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

Показать ответ и решение
def tr(n):
    x = n
    s = ’’
    while x > 0:
        s = str(x % 3) + s
        x = x // 3
    return s

mn = 10**10
for n in range(1, 100):
    t = tr(n)
    if (t.count(’1’)+t.count(’2’)) % 2 == 0:
        t += ’0’
    else:
        t += ’1’

    if (t.count(’1’)+t.count(’2’)) % 2 == 0:
        t += ’0’
    else:
        t += ’1’

    if int(t, 3) > 337:
        mn = min(mn, int(t, 3))

print(mn)

Ответ: 345

Ошибка.
Попробуйте повторить позже

Задача 12#72419

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

  1. Строится двоичная запись числа N.
  2. Подсчитывается количество единиц, стоящих на нечётных местах и количество нулей, стоящих на чётных в двоичной записи числа N без ведущих нулей. Отсчёт производится слева направо.
  3. Результатом становится произведение полученных двух чисел.

При каком наименьшем N в результате работы алгоритма получится R = 16?

Показать ответ и решение
for n in range(2, 200):
    b = bin(n)[2:]
    # Помним про итерацию в python с нуля
    ch = [b[i] for i in range(len(b)) if i % 2 != 0]
    nch = [b[i] for i in range(len(b)) if i % 2 == 0]

    if ch.count(’0’)*nch.count(’1’) == 16:
        print(n)
        break

Ответ: 170

Ошибка.
Попробуйте повторить позже

Задача 13#72185

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

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

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

   а) если остаток от деления числа N  на 5 чётный, то к этой записи справа дописываются два нуля.

   б) если остаток от деления числа N  на 5 нечётный, то к этой записи справа дописывается единица.

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

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

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

Показать ответ и решение
ans= []
for n in range(1,1000):
    t = bin(n)[2:]
    if (n % 5) % 2 == 0:
        t += ’00’
    else:
        t += ’1’
    r = int(t,2)
    if r > 300:
        ans += [r]
print(min(ans))

Ответ: 303
Рулетка
Вы можете получить скидку в рулетке!