5.01 Запись числа в двоичной системе счисления
Ошибка.
Попробуйте повторить позже
На вход алгоритма подаётся натуральное число . Алгоритм строит по нему новое число следующим образом.
- Строится двоичная запись числа .
-
К этой записи дописываются ещё два разряда по следующему правилу:
- 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 i in range(4, 100000): # от 4, чтобы вторая слева цифра существовала s = bin(i)[2:] s = list(s) s[-1] = s[1] s += [s[1]] s = ’’.join(s) r = int(s, 2) if r > 115: print(i) 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? В двоичной СС оно выглядит как . Так что вполне возможно. Если откинем последние две цифры, то у нас останется число , у него чётное число единиц, а значит после работы алгоритма к нему дописали бы два нуля, но это как раз те самые цифры, которые мы откинули, значит и есть искомое число.