Задать вопрос
@rihoplya
Собираюсь поступать в ВУЗ

Не могу решить задание из ЕГЭ. Опечатка?

Вот задание:

Алгоритм получает на вход натуральное число 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... Есть подобное задание на форуме и объяснение мне помогло, но к правильному ответу все равно не пришла.
  • Вопрос задан
  • 150 просмотров
Подписаться 1 Простой 2 комментария
Решения вопроса 1
@99insania99
Считать четные и нечетные надо на каждой итерации цикла "дописывания". Что-то типа такого
примерный код
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)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы
Wanted Москва
от 60 000 до 120 000 ₽
Wanted Санкт-Петербург
До 120 000 ₽