Войти
или
Зарегистрироваться
Маркетплейс
Курсы
Учебник
Учебник 2.0
ОГЭ/ЕГЭ
Олимпиады
Рубрикатор
Компилятор
Онлайн Компилятор
Компилятор Python с отладкой
Питон - Черепашка
Редактор HTML Code
SQLite Studio - работа с БД
Статья Автор:
Лебедев Дмитрий Алексеевич
Практика_Задача 1 (демо-версия)
Самая сложная задача
Надо написать эффективную программу вычисления числа делителей
Эффективную написать не сможем, а напишем до корня
def sum_dev(n): d = 0 s = 0 while d * d < n : d += 1 if n % d == 0 : s += d + n//d if d * d == n : s += d return s A= [6, 36, 72] for n in A: ans = sum_dev(n) print(f'{n=} {ans=}')
×
Подпрограмму проверили.
Пишем основную
читаем число
инициализируем ответ
организуем цикл, учитывая, что включительно
внутри цикла простая обработка
def sum_dev(n): d = 1 s = 0 while d * d < n : if n % d == 0 : s += d + n//d d +=1 if d * d == n : s += d return s n = int(input()) # ввод границы поиска ans, amd = 1, 1 # инициализация первым ответом for k in range(1, n+1): # обход отрезка sd = sum_dev(k) # определение числа делителей if sd > amd : # сравнение с лучшим ans = k # фиксация результата amd = sd print(ans) # вывод ответа
×
Убедившись, что все работает соединяем части
def count_digits(s): if s.isdigit() == False: return -1 #в строке есть не числа if int(s[0]) == 0 : return -1 #строка из цифр, но начинается с нуля ans = 0 # инициализация ответа for a in s: #обработка строки ans += int(a) return ans def obrabotka(s): n = len(s) # длина стороки t = '' #инициализация ответа flag = True # флаг завершения работы/достижения окончания строки i = 0 # инициализация начала слова while flag : # обработка строки while i < n and s[i] == ' ' : # прогон до начала очередного слова t += s[i] # дублирование символа i +=1 # увеличение индекса if i == n : # проверка остановки flag = False # фиксация флага остановки j = i #инициализация индекса "конца слова" while j <n and s[j] !=' ' : #прогон до конца слова j += 1 if j > i : #провера того, что слово не пустое w = s[i:j] # выделяем слово ans = count_digits(w) # проверяем слово if ans > 0 : #слово - число, заменяем на сумму w = str(ans) t += w #добавляем в ответ i = j # задаем новое начало return t SS= ['123fa',' 123 056 ','1234567890 ', ' 012345 '] SS=['0'] for s in SS: ans = obrabotka(s) print(f'{ s=}\n{ans=}')
×
Простая обработка строк
читаем строку и сплитуем
инициализируем ответ
бежим по словам и проверяем
A = [ s for s in input().split()] # создание списка слов через генератов ans = 0 # инициализация ответа for w in A : # бежим по списку слов if w[:2] == 'um' or w[-2:] == 'um' : # проверка условия через ИЛИ ans += 1 # фиксация ответа print(ans) # вывод ответа
×
Печать