5.01 Запись числа в двоичной системе счисления
Ошибка.
Попробуйте повторить позже
На вход алгоритма подаётся натуральное число . Алгоритм строит по нему новое число
следующим
образом.
- Строится двоичная запись числа
.
-
К этой записи дописываются ещё два разряда по следующему правилу:
- cкладываются все цифры двоичной записи числа
, и остаток от деления суммы на
дописывается в конец числа (справа). Например, запись числа
преобразуется в запись
;
- над этой записью производятся те же действия — справа дописывается остаток от деления суммы цифр
на
.
- cкладываются все цифры двоичной записи числа
Полученная таким образом запись (в ней на два разряда больше, чем в записи исходного числа ) является двоичной
записью искомого числа
.
Укажите такое наименьшее число , которое превышает
и может являться результатом работы этого алгоритма.
В ответе это число запишите в десятичной системе счисления.
Аналитическое решение:
Заметим, что если число единиц в двоичной записи нечётное, то в первый раз допишется единица, а затем число единиц
станет чётным, и во второй раз мы допишем ноль. Если же число единиц в двоичной записи чётное, то в первый раз мы
допишем ноль, затем количество единиц не изменится, и мы снова допишем ноль. Таким образом, в любом случае
последняя цифра числа — ноль. Напишем программу:
for i in range(1, 100): s = bin(i)[2::] a = 0 for j in range(len(s)): a += int(s[j]) if a % 2 == 0: s += ’00’ else: s += ’10’ if int(s, 2) > 43: print(int(s, 2)) break
Ошибка.
Попробуйте повторить позже
На вход алгоритма подаётся натуральное число . Алгоритм строит по нему новое число
следующим
образом.
1. Строится двоичная запись числа .
2. К этой записи дописывается единица.
3. Затем справа дописывается бит чётности: , если в двоичном коде полученного числа чётное число единиц, и
,
если нечётное.
4. К полученному результату дописывается ещё один бит чётности.
Полученная таким образом запись (в ней на три разряда больше, чем в записи исходного числа ) является двоичной
записью искомого числа
. Какое минимальное число
, большее
, может быть получено в результате работы
автомата?
for n in range(1, 100): s = bin(n)[2:] # перевод в двоичную систему s = str(s) s += ’1’ if s.count(’1’) % 2 == 0: s += ’0’ else: s += ’1’ if s.count(’1’) % 2 == 0: s += ’0’ else: s += ’1’ r = int(s, 2) # перевод в десятичную систему if r > 168: print(r) break
Аналитическое решение:
Имеется число . В любом случае к нему дописывается единица, поэтому будем рассуждать, будто бы число и было
таким(с дописанной единицей) изначально. Если количество единиц чётно, то и сумма цифр числа чётна, а значит к числу
допишется ноль. Если же количество единиц нечётно, то и сумма цифр числа нечётна, а значит к числу допишется
единица. Если мы дописали единичку, то количество единиц увеличится на 1, а значит, что после этого сумма
будет чётна, и уже в следующем пункте мы допишем нолик. Если мы дописали ноль, то сумма числа не
меняется, а значит в следующем пункте мы также допишем нолик. Значит число в 2 СС заканчивается на
100 или 110 (учли, что мы изначально при любых обстоятельствах дописываем единицу, а потом 00 или
10).
Нам необходимо найти число, большее, чем 168, которое в 2 СС заканчивается на 100 или 110. Будем перебирать с минимального.
Подойдет ли число ? Нет, оно кончается на 001.
Подойдет ли число ? Нет, оно кончается на 010.
Подойдет ли число ? Нет, оно кончается на 011.
Подойдет ли число ? Да, так как оно заканчивается на 100. Значит это и есть наш
ответ.
Ошибка.
Попробуйте повторить позже
Алгоритм получает на вход натуральное число N > 1 и строит по нему новое число R следующим образом:
1. Строится двоичная запись числа N.
2. В конец записи (справа) дописывается конъюнкция двух правых крайних цифр двоичной записи числа N.
3. В конец записи (справа) дописывается конъюнкция двух левых крайних цифр двоичной записи числа N.
4. Результат переводится в десятичную систему.
Пример. Дано число N = 23. Алгоритм работает следующим образом:
1. Двоичная запись числа N: 10111.
2. Конъюнкция двух правых крайних цифр 1, новая запись 101111.
3. Конъюнкция двух левых крайних цифр 0, новая запись 1011110.
4. Результат работы алгоритма R = 94.
При каком наименьшем числе N в результате работы алгоритма получится R > 198? В ответе запишите это число в десятичной системе счисления.
Аналитическое решение:
При дописывании двух цифр в двоичной записи мы увеличиваем число в 4 раза и прибавляем число от 0 до 3. Логично рассматривать N>=49, так как оно при умножении на 4 может дать число, большее 198. Попробуем на числе 49 заданный алгоритм, получим 197. Значит, ответом будет являться 50, так как 50 при умножении на 4 даст уже 200, что больше, чем 198.
Решение программой:
for n in range(2, 10000): s = bin(n)[2:] s += str(int(s[-1]) & int(s[-2])) s += str(int(s[0]) & int(s[1])) if int(s, 2) > 198: print(n) break
Ошибка.
Попробуйте повторить позже
Алгоритм получает на вход натуральное число и строит по нему новое число
следующим образом:
- Строится двоичная запись числа
.
- Вместо последней (самой правой) двоичной цифры дважды записывается вторая слева цифра двоичной записи.
- Результат переводится в десятичную систему.
Пример. Дано число . Алгоритм работает следующим образом:
- Двоичная запись числа
.
- Вторая слева цифра
, единица в конце записи заменяется на два нуля, новая запись
.
- Результат работы алгоритма
.
При каком наименьшем числе в результате работы алгоритма получится
? В ответе запишите это число в
десятичной системе счисления.
for i in range(2, 1000): n = bin(i)[2:] n = n[:-1] + n[1] * 2 if int(n, 2) > 92: print(i) break
Аналитическое решение:
Давайте перебирать числа , большие, чем
, мы знаем, что получившееся число должно оканчиваться на две
одинаковые цифры и эти цифры должны совпадать со второй цифрой слева.
Подойдёт число ? Нет, последние две цифры не совпадают.
Подойдёт число ? Нет, последние две цифры не совпадают.
Подойдёт число ? Возможно, так как последние две цифры совпадают, но вторая цифра слева - ноль, а
значит её не могли дописать два раза и получить
, значит оно не подходит.
Подойдёт число ? Возможно, так как последние две цифры совпадают, но вторая цифра слева - единица,
а значит её не могли дописать два раза и получить
, значит оно не подходит.
Подойдёт число ? Нет, последние две цифры не совпадают.
Подойдёт число ? Нет, последние две цифры не совпадают.
Подойдёт число ? Возможно, так как последние две цифры совпадают, вторая цифра - единица, и число
само заканчивается на две единицы, а значит это число могло быть результатом алгоритма. Значит раньше число
выглядело так:
, где вместо икса может быть любая цифра, так как две одинаковые цифры записываются
ВМЕСТО последней цифры. Значит минимальным числом будет
.
Ошибка.
Попробуйте повторить позже
Автомат обрабатывает натуральное число по следующему алгоритму:
- Строится двоичная запись числа
.
- Складываются все цифры полученной двоичной записи. В конец записи (справа) дописывается остаток от
деления суммы на
.
- Предыдущий пункт повторяется для записи с добавленной цифрой.
- Результат переводится в десятичную систему и выводится на экран.
Пример. Дано число . Алгоритм работает следующим образом:
- Двоичная запись числа
.
- Сумма цифр двоичной записи
, остаток от деления на
равен
, новая запись
.
- Сумма цифр полученной записи
, остаток от деления на
равен
, новая запись
.
- На экран выводится число
.
Какое наименьшее число, большее , может появиться на экране в результате работы автомата?
for n in range(1, 10000): r = bin(n)[2:] r = r + str(r.count(’1’) % 2) r = r + str(r.count(’1’) % 2) r = int(r, 2) if r > 150: print(r) break
Ошибка.
Попробуйте повторить позже
На вход алгоритма подаётся натуральное число . Алгоритм строит по нему новое число
следующим
образом.
1) Строится двоичная запись числа .
2) К этой записи дописываются справа ещё два разряда по следующему правилу:
- а) складываются все цифры двоичной записи, и остаток от деления суммы на
дописывается в конец числа (справа). Например, запись
преобразуется в запись
;
- б) над этой записью производятся те же действия — справа дописывается остаток от деления суммы цифр на
.
Полученная таким образом запись (в ней на два разряда больше, чем в записи исходного числа ) является двоичной
записью искомого числа
.
Укажите минимальное число , которое превышает
и может являться результатом работы алгоритма. В ответе
это число запишите в десятичной системе.
for i in range(1, 100000): s = bin(i)[2:] s += str(s.count(’1’) % 2) s += str(s.count(’1’) % 2) r = int(s, 2) if r > 103: print(r) break
Ошибка.
Попробуйте повторить позже
Алгоритм получает на вход натуральное число и строит по нему новое число
следующим образом:
1. Строится двоичная запись числа .
2. Вместо последней (самой правой) двоичной цифры дважды записывается вторая слева цифра двоичной записи.
3. Результат переводится в десятичную систему.
При каком наименьшем числе в результате работы алгоритма получится
? В ответе запишите это число в
десятичной системе счисления.
for n in range(2, 100000): # Перебор значений N>1 r = bin(n)[2:] # Получаем двоичную запись числа N r = list(r) # Получем список цифр r[-1] = r[1] + r[1] # Заменяем последнюю цифру второй цифрой слева дважды r = ’’.join(r) # Получаем обратно строку из списка r = int(r, 2) # Получаем итоговое число в десятичной системе счисления if r > 115: # Проверка выполнения условия print(n) break # Первое выведенное значение будет минимальным
Ошибка.
Попробуйте повторить позже
Автомат обрабатывает натуральное число по следующему алгоритму:
- Строится восьмибитная двоичная запись числа
.
- Инвертируются разряды исходного числа (
заменяется на
,
на
).
- К полученному двоичному числу прибавляют единицу.
- Полученное число переводится в десятичную систему счисления.
Для какого числа результат работы алгоритма равен
?
Разряды инвертируются, нетрудно заметить, что в двоичной записи сумма восьмибитного числа и его инвертированной
версии равна . Кроме того, мы знаем, что x+1 = 156. Значит, можем решить систему:
|
.
Решение программой:
for i in range(1, 128): s = ’0’ * (8 - len(bin(i)[2::])) + bin(i)[2::] x = ’’ for j in range(len(s)): if s[j] == ’1’: x += ’0’ else: x += ’1’ if (int(x, 2) + 1) == 156: print(i)
Ошибка.
Попробуйте повторить позже
На вход алгоритма подаётся натуральное число . Алгоритм строит по нему новое число
следующим
образом.
1) Строится двоичная запись числа .
2) К этой записи дописывается (дублируется) последняя цифра.
3) Затем справа дописывается , если в двоичном коде числа
чётное число единиц, и
, если нечётное.
4) К полученному результату справа дописывается ещё один бит чётности так, чтобы количество единиц в двоичной записи полученного числа стало чётным.
Полученная таким образом запись (в ней на три разряда больше, чем в записи исходного числа ) является двоичной
записью искомого числа
. Укажите минимальное число
, после обработки которого автомат получает число, большее
. В ответе это число запишите в десятичной системе.
for i in range(1000): n = i s = bin(n)[2:] s = s + s[-1] s = s + str(s.count(’1’) % 2) s = s + str(s.count(’1’) % 2) r = int(s, 2) if r > 90: print(n) break
Ошибка.
Попробуйте повторить позже
На вход алгоритма подаётся натуральное число . Алгоритм строит по нему новое число
следующим
образом.
- Строится двоичная запись числа
.
-
К этой записи дописываются справа ещё два разряда по следующему правилу:
- складываются все цифры двоичной записи числа
, и остаток от деления суммы на
дописывается в конец числа (справа). Например, запись
преобразуется в запись
;
- над этой записью производятся те же действия — справа дописывается остаток от деления суммы ее
цифр на
.
- складываются все цифры двоичной записи числа
Полученная таким образом запись является двоичной записью искомого числа . Укажите минимальное число
, которое
превышает число
и может являться результатом работы данного алгоритма. В ответе это число запишите в
десятичной системе счисления.
for i in range(1, 1000): r = bin(i)[2:] r += str(r.count(’1’) % 2) r += str(r.count(’1’) % 2) if int(r, 2) > 1000: print(int(r, 2)) break
Ошибка.
Попробуйте повторить позже
На вход алгоритма подаётся натуральное число . Алгоритм строит по нему новое число
следующим
образом.
1. Строится двоичная запись числа ;
2. К этой записи дописываются справа ещё два разряда по следующему правилу:
а) складываются все цифры двоичной записи числа , и остаток от деления суммы на
дописывается в конец
числа (справа). Например, запись
преобразуется в запись
;
б) над этой записью производятся те же действия — справа дописывается остаток от деления суммы ее цифр на
.
Полученная таким образом запись является двоичной записью искомого числа . Укажите минимальное число
,
для которого число
превышает число
и
может являться результатом работы данного алгоритма. В ответе это
число запишите в десятичной системе счисления.
x = bin(x)[2:]
#шаг 2а
summ = x + str(sum([int(i) for i in x]) % 2)
#шаг 2б
summ += str(sum([int(i) for i in summ]) % 2)
return int(summ, 2)
for i in range(1, 10000):
if alg(i) > 500:
print(i)
break
Ошибка.
Попробуйте повторить позже
На вход алгоритма подаётся натуральное число . Алгоритм строит по нему новое число
следующим
образом.
- Строится двоичная запись числа
.
- К этой записи слева дописывается ноль.
- Затем справа дописывается
, если в двоичном коде числа
чётное число значащих нулей, и
, если нечётное.
- Шаг
повторяется.
Полученная таким образом запись (в ней на три разряда больше, чем в записи исходного числа ) является двоичной
записью искомого числа
. Укажите минимальное число
, большее
, которое могло получиться в результате
работы автомата. В ответе это число запишите в десятичной системе.
for i in range(1, 1000): n = bin(i)[2:] # так как 0 дописывается слева, он незначащий n += str((n.count(’0’) % 2 == 0) * 1) n += str((n.count(’0’) % 2 == 0) * 1) n = int(n, 2) if n > 199: print(n) break
Ошибка.
Попробуйте повторить позже
На вход алгоритма подаётся натуральное число . Алгоритм строит по нему новое число
следующим
образом.
1) Строится двоичная запись числа
2) К этой записи дописываются разряды по следующему правилу:
а) если число чётное, то к двоичной записи числа в конце дописывается
б) если число нечётное, то к двоичной записи числа в конце дописывается
Полученная таким образом запись является двоичной записью искомого числа . Укажите наибольшее число
,
меньшее
, которое может получиться после обработки этого алгоритма. В ответе запишите это число в десятичной
записи.
Решение №1
Рассмотрим первое максимально возможное число , меньшее
, а именно
. Переведем в двоичную систему
счисления и получим
. Уберём две последние цифры и получим нечетное число, а значит к исходному
числу
должно было добавиться
. Значит, число
не могло получиться в результате работы
алгоритма.
Теперь мы сразу можем угадать число . У нас есть
, и к нему нужно добавить
. Получаем число
.
Решение №2
ans = 0 for i in range(1000): s = bin(i)[2::] if i % 2 == 0: s += ’11’ else: s += ’01’ if int(s, 2) < 128: ans = max(ans, int(s, 2)) print(ans)
Ошибка.
Попробуйте повторить позже
На вход алгоритма подаётся натуральное число . Алгоритм строит по нему новое число
следующим
образом.
- Строится двоичная запись числа
.
-
К этой записи дописываются ещё два разряда по следующему правилу:
- складываются все цифры двоичной записи, и остаток от деления этой суммы на
дописывается в конец числа (справа).
- над этой записью производятся те же действия — справа дописывается остаток от деления суммы цифр
на
.
- складываются все цифры двоичной записи, и остаток от деления этой суммы на
Полученная таким образом запись (в ней на два разряда больше, чем в записи исходного числа ) является двоичной
записью искомого числа
. Какое наибольшее число, меньшее
, может быть получено в результате работы
автомата?
ans = 0 for i in range(1, 1000): s = bin(i)[2:] s += str(s.count(’1’) % 2) s += str(s.count(’1’) % 2) if int(s, 2) < 77 and int(s, 2) > ans: ans = int(s, 2) print(ans)
Ошибка.
Попробуйте повторить позже
На вход алгоритма подаётся натуральное число . Алгоритм строит по нему новое число R следующим
образом.
1) Строится двоичная запись числа
2) К этой записи дописываются разряды по следующему правилу:
а) если число чётное, то к двоичной записи числа в конце дописывается
б) если число нечётное, то к двоичной записи числа в конце дописывается
Полученная таким образом запись является двоичной записью искомого числа . Укажите наибольшее число
меньшее
, которое может получиться после обработки этого алгоритма. В ответе запишите это число в десятичной
записи.
Рассмотрим первое число . Переведем в двоичную сс и получим
. Отрубим две последние цифры и
получим число нечетное, а значит должно было добавиться
. Значит не подходит.
Похоже это число мы сразу можем угадать. У нас есть и к нему должно добавить
. Получаем число
. (Число
также не подходит т.к.
)
Решение №2
ans = 0 for i in range(1000): s = bin(i)[2::] if i % 2 == 0: s += ’11’ else: s += ’01’ if int(s, 2) < 128: ans = max(ans, int(s, 2)) print(ans)
Ошибка.
Попробуйте повторить позже
Алгоритм получает на вход натуральное число и строит по нему новое число
следующим образом:
- Строится двоичная запись числа
.
- Вместо последней (самой правой) двоичной цифры дважды записывается вторая слева цифра двоичной записи.
- Результат переводится в десятичную систему.
При каком наименьшем числе в результате работы алгоритма получится
? В ответе запишите это число в
десятичной системе счисления.
Аналитическое решение:
Возьмем число . Видим, что вторая слева цифра и последние
совпадают, значит обрубаем
последние
цифры и получаем
, но тут не хватает одной цифры, которую удалили, и наименьшее тут будет являться
,
поэтому допишем его
.
Решение программой:
for i in range(2, 1000): s = bin(i)[2::] s = s[:len(s) - 1] + s[1] * 2 if int(s, 2) > 58: print(i) break
Ошибка.
Попробуйте повторить позже
Исполнитель Олень получает число и строит по нему новое число следующим образом:
- Строится двоичная запись числа
.
- Вместо последней двоичной цифры дважды записывается вторая слева цифра двоичной записи.
- Результат переводится в десятичную систему.
Полученная таким образом запись (в ней на один разряд больше, чем в записи исходного числа ) является двоичной
записью искомого числа
.
Укажите такое наименьшее число , для которого Олень получит число, большее, чем
. В ответе это число
запишите в десятичной системе счисления.
Переведем . Последние 2 цифры не совпадают с второй слева цифрой, получается ищем
следующее.
Переведем . Также не совпадает.
Переведем . Вторая слева и последние 2 совпадают. Обрубаем последние.
. Сейчас также нам
не хватает обрубленной цифры, и чтобы вышло наименьшее N нужно взять 0.
.
Решение №2
for i in range(2, 1000): s = bin(i)[2:] s = s[:len(s) - 1] + s[1] * 2 if int(s, 2) > 177: print(i) break
Ошибка.
Попробуйте повторить позже
Алгоритм получает на вход натуральное число и строит по нему новое число R следующим образом:
1. Строится двоичная запись числа .
2. Вместо последней (самой правой) двоичной цифры дважды записывается вторая слева цифра двоичной записи.
3. Результат переводится в десятичную систему.
Пример. Дано число . Алгоритм работает следующим образом:
1. Двоичная запись числа .
2. Вторая слева цифра , единица в конце записи заменяется на два нуля, новая запись
.
3. Результат работы алгоритма .
При каком наименьшем числе в результате работы алгоритма получится
? В ответе запишите это число в
десятичной системе счисления.
Решение №1
Переведем . Не совпадают.
Переведем . Не совпадают.
Переведем . Совпали. Обрубим
последние цифры и припишем
.
.
Решение №2
for i in range(6, 1000): s = bin(i)[2::] s = s[:len(s) - 1] s += s[1] * 2 if int(s, 2) > 48: print(i) break
Ошибка.
Попробуйте повторить позже
Алгоритм получает на вход натуральное число и строит по нему новое число
следующим образом:
- Строится двоичная запись числа
.
- В конец записи (справа) дописывается вторая слева цифра двоичной записи.
- В конец записи (справа) дописывается вторая справа цифра двоичной записи числа
.
- Результат переводится в десятичную систему.
Пример. Дано число . Алгоритм работает следующим образом:
- Двоичная запись числа
.
- Вторая слева цифра
, новая запись
.
- Вторая справа цифра
, новая запись
.
- Результат работы алгоритма
.
При каком наибольшем числе в результате работы алгоритма получится
? В ответе запишите это число в
десятичной системе счисления.
ans = 0 for i in range(2, 1000): s = bin(i)[2::] x = s x += s[1] + s[-2] if int(x, 2) < 90: ans = i print(ans)
Ошибка.
Попробуйте повторить позже
На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом:
1)Строится двоичная запись числа N.
2)К этой записи дописываются справа ещё два разряда по следующему правилу:
а)Дописывается справа бит чётности: 0, если в двоичном коде числа N было чётное число единиц, и 1, если нечётное;
б)К полученному результату дописывается ещё один бит чётности
Полученная таким образом запись (в ней на два разряда больше, чем в записи исходного числа N) является двоичной записью искомого числа R.
Укажите минимальное число N, после обработки которого с помощью этого алгоритма получается число, большее, чем 78. В ответе это число запишите в десятичной системе.
for i in range(1, 1000): s = bin(i)[2::] if s.count(’1’) % 2 == 0: s += ’0’ else: s += ’1’ if s.count(’1’) % 2 == 0: s += ’0’ else: s += ’1’ if int(s, 2) > 78: print(i) break
Аналитическое решение:
Если изначальное число имеет чётное количество единиц, то после добавления нуля количество единиц не
изменится, а потому на следующем шаге также добавится ноль. Итого к числу допишут два нуля.
Если изначально число имеет нечётное количество единиц, то после добавления единицы количество единиц
увеличится на 1, что означает, что количество единиц станет чётным числом, а значит на следующем шаге уже будут
добавлять ноль. Итого к числу допишут единицу и ноль.
Значит мы будем проверять только числа, которые кончаются на или
.
Могло ли получиться число ? Нет, в двоичной СС оно выглядит как
, а значит получиться после
алгоритма не могло.
Могло ли получиться число 80? В двоичной СС оно выглядит как . Так что вполне возможно. Если откинем
последние две цифры, то у нас останется число
, у него чётное число единиц, а значит после работы алгоритма к
нему дописали бы два нуля, но это как раз те самые цифры, которые мы откинули, значит
и есть искомое
число.