Форум » Обработка целых чисел » Задача 50 (А.Куканова) » Ответить

Задача 50 (А.Куканова)

ИринаЧ: Рассматривается множество целых чисел, принадлежащих числовому отрезку [331; 8751], которые удовлетворяют следующим условиям: − количество цифр в десятичной и шестнадцатеричной записях одинаковое; − кратны 5, но не 25. Найдите количество таких чисел и минимальное из них. Подскажите, пожалуйста, как правильно на Python прописать: количество цифр в десятичной и шестнадцатеричной записях одинаковое.

Ответов - 10

polyakovss: Например, так: [pre2]def f(x): def count(x,k): n=0 i=x while i: n += 1 i //= k return n if count(x,10)==count(x,16) and x % 5 == 0 and x % 25 != 0: return True else: return False L = [x for x in range(331, 8751+1) if f(x)] print(len(L),' ',L[0]) [/pre2]

s11kai: polyakovss пишет: Например, так: def f(x): А для тех, кто "боится" функций, можно попробовать обойтись и без них, например, так: [pre2] summ = 0 for i in range(8751,330,-1): n = i; count = 0 while n: count += 1 n//=16 if count == len(str(i)) and i%5 == 0 and i%25 != 0: summ += 1 pam = i print(' summ = ',summ,' pam = ',pam) [/pre2]

ИринаЧ: Спасибо большое!!!


_RayBoy_: Есть способ легче, через встроенную функцию hex() - перевод из 10 в 16:[pre2] count = 0 Qmax = 0 for i in range(331, 8751+1): if len(hex(i)[2:]) == len(str(i)) and \ i % 5 == 0 and i % 25 != 0: count += 1 if Qmax == 0: Qmax = i print(count, Qmax)[/pre2]

_piter: _RayBoy_ пишет: Есть способ легче Легче, не всегда бывает - понятнее. И так тоже работать будет: [pre2] count=0 for i in range(8751, 330, -1): if len(hex(i)[2:]) == len(str(i)) and i % 5 == 0 and i % 25 != 0: count += 1 c=i print(count,c) [/pre2]

s11kai: _piter пишет: count=0 for i in range(8751, 330, -1): if len(hex(i)[2:]) == len(str(i)) and i % 5 == 0 and i % 25 != 0: count += 1 c=i print(count,c) Оптимально красивое решение!

polyakovss: Тогда уж так: [pre2] L = [x for x in range(331, 8751) if len(hex(x)[2:]) == len(str(x)) and x % 5 == 0 and x % 25 != 0] print(len(L),L[0]) [/pre2]

_piter: polyakovss пишет: L = [x for x in range(331, 8751) if len(hex(x)[2:]) == len(str(x)) and x % 5 == 0 and x % 25 != 0] print(len(L),L[0]) Красивое решение, только в условии говорится: "Рассматривается множество целых чисел, принадлежащих числовому отрезку [331; 8751]", т.е. число 8751 должно быть так же формально проверено на соответствие условию, а в данном случае оно игнорируется, хотя я могу и ошибаться, поскольку с питоном работаю только второй месяц

polyakovss: Здравствуйте, _piter! Вы абсолютно правы. Увы, был невнимателен. Конечно, правильно так:[pre2] L = [x for x in range(331, 8751+1) if len(hex(x)[2:]) == len(str(x)) and x % 5 == 0 and x % 25 != 0] print(len(L),L[0]) [/pre2]

_piter: polyakovss пишет: Здравствуйте, _piter! Вы абсолютно правы. Увы, был невнимателен. Конечно, правильно так: Здравствуйте, polyakovss! Приятно, что среди профессионалов, встречаются люди, способные признавать и исправлять свои ошибки, что, к сожалению не каждому дано. Так что, респект Вам!



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