@SSSXXX

№5 ЕГЭ по информатике?

Пытался решить задачу, но выдает ошибку при переводе в 10-ичную сс. Помогите, пожалуйста, решить задачу.

Автомат обрабатывает десятичное натуральное число N по следующему алгоритму:
1) Строится двоичная запись числа N.
2) К полученному числу справа дописывается 0, если в числе единиц больше, чем нулей; иначе дописывается 1.
3) Из середины двоичного числа убирается 2 разряда, если количество разрядов получилось четным, и 3 разряда, если нечетное.
4) Результат переводится в десятичную систему.
Пример. Дано число N = 11. Алгоритм работает следующим образом.
1) Двоичная запись числа N: 11 = 10112
2) Единиц больше, чем нулей, новая запись 101102.
3) Длина начётная, удаляем три средних разряда, новая запись 102.
4) Десятичное значение полученного числа 2.
Сколько различных значений может получиться на отрезке [50; 100] в результате работы автомата?

cnt = 0
for n in range(1, 1000):
    s = bin(n)[2:]
    if s.count('1') > s.count('0'):
        s += '0'
    else:
        s+= '1'
    m = len(s) // 2 ## округляется по меньшему числу
    if len(s) % 2 == 0:
        s = s[:m-1] + s[m+1:]
    else:
        s = s[:m-1] + s[m+2:]
    r = int(s, 2)
    if 50 <= r <= 100:
        cnt += 1
print(cnt)


Ошибка
Traceback (most recent call last):
line 13, in <module>
    r = int(s, 2)
ValueError: invalid literal for int() with base 2: ''
  • Вопрос задан
  • 5842 просмотра
Пригласить эксперта
Ответы на вопрос 1
@Bright144
Вот решение:
cnt = 0
for n in range(1, 1000):
    n = n << 1 ^ (n.bit_count() > n.bit_length() - n.bit_count()) #добавляем в конец 1 или 0
    bit_l = n.bit_length()              #длина битов
    del_bit_l = 2 + bit_l%2               #длина удаляемого бита
    l_r = int((bit_l - del_bit_l)/2)    #длина левого и правого бита
    l_bit = n >> bit_l - l_r << l_r     #левый бит
    r_bit = n&2**l_r - 1                   #правый бит
    r = l_bit|r_bit
    if 50 <= r <= 100:
        cnt += 1
print(cnt)

Тут главное n не должен быт 0 или -1. Но это тоже можно решать поставив условие. В r получаешь выходной данный который описал в алгоритме.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы