Алгоритм получает на вход натуральное число N и строит по нему новое число R следующим образом:
1. Строится двоичная запись числа N.
2. Подсчитывается количество чётных и нечётных цифр в десятичной записи заданного числа. Если в десятичной записи больше чётных цифр, то в конец двоичной записи дописывается 1, если нечётных — 0. Если чётных и нечётных цифр в десятичной записи поровну, то в конец двоичной записи дописывается 0, если данное число чётное, и 1 — если нечётное.
3−4. Пункт 2 повторяется для вновь полученных чисел ещё два раза.
5. Результатом работы алгоритма становится десятичная запись полученного числа R.
Определите количество принадлежащих отрезку [876 544; 1 234 567 899] чисел, которые могут получиться в результате работы этого алгоритма.
Вот мой код:
chet = []
nechet = []
N = int(input())
N1=list(map(int, str(N)))
for i in N1:
if i%2==0: chet.append(i)
if i%2!=0: nechet.append(i)
for i in range(3):
if (len(chet) < len(nechet)) or ((len(chet) == len(nechet)) and (N%2==0)): N= N*2
elif len(chet) > len(nechet) or ((len(chet) == len(nechet)) and (N%2!=0)): N = N*2 + 1
print(N)
Но выводятся не те числа, то есть введу 14, а выходит итог 112... Есть подобное задание на форуме и объяснение мне помогло, но к правильному ответу все равно не пришла.
Считать четные и нечетные надо на каждой итерации цикла "дописывания". Что-то типа такого
примерный код
N = int(input())
for _ in range(3):
chet = 0
nechet = 0
for i in str(N):
if int(i) % 2:
nechet += 1
else:
chet += 1
if chet > nechet:
N = N << 1 + 1
elif chet < nechet:
N = N << 1
elif N % 2:
N = N << 1 + 1
else:
N = N << 1
print(N)