Форум » Выполнение и анализ алгоритмов для исполнителей » Задание 5 номер 329 - не сходится ответ. » Ответить

Задание 5 номер 329 - не сходится ответ.

les: Здравствуйте! 329) (Е. Джобс) На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом: 1. Строится двоичная запись числа N. 2. К этой записи дописываются разряды по следующему правилу. Если число кратно 3, то справа дописывается 010, иначе справа дописывается двоичная запись результата умножения 5 на остаток от деления числа N на 3. 3. Полученная таким образом запись является двоичной записью искомого числа R. Например, для числа 13 двоичная запись 11012 преобразуется в запись 11011012 = 109, для числа 9 двоичная запись 10012 преобразуется в 10010102 = 74. Укажите значение N, в результате обработки которого будет получено минимально возможное четное значение R, большее 300. Если таких значений несколько, приведите минимальное подходящее значение. На сайте правильный ответ - 39. У нас получается - 20. Пробовали программный код для номера 328 (автор Е.Джобс) отредактировать под номер 329. res = set() for N in range(12,100): b = bin(N)[2:] if N % 3 == 0: b = b +'010' else: b = b+ bin(5*(N%3))[2:] R = int(b, 2) if R > 300 and R %2 ==0: res.add(N) print(min(res)) Программа выдает ответ 20. Подскажите, пожалуйста, что у нас не так. Вот писали еще свой код (это изначально, не затрагивая пример кода к номеру 328): for n in range (1,1000): r=bin(n)[2:] if n%3==0: r1=r+'010' else: s=bin(5*(n%3))[2:] r1=r+s if int(r1,2)%2==0 and int(r1,2)>300: print(n) break

Ответов - 2

elpov06: Добрый день, распространенная ошибка в решении, запись break. Дело в том, что наименьшее число может быть и не первым в списке, ведь оно формируется по сложному правилу, поэтому лучше занести все числа в массив найти минимальное и затем соответственное n. Решение [pre2]rez=[] for n in range (1,1000): r=bin(n)[2:] if n%3==0: r1=r+'010' else: s=bin(5*(n%3))[2:] r1=r+s if int(r1,2)%2==0 and int(r1,2)>300: rez.append([int(r1,2)]) if int(r1,2)==314: print(n,"ответ") print(min(rez),"минимальное число") [/pre2]

les: Спасибо за ответ!



полная версия страницы