Цифры на городских табличках
Условие
В городе Текстоград на табличках и объявлениях часто вперемешку написаны буквы, пробелы и цифры. Дежурный по району решил посчитать «силу цифр» объявления: он складывает значения всех отдельных цифр, которые встречаются в тексте.
Например, в строке Дом 12, подъезд 3 он складывает 1 + 2 + 3.
Формат ввода
Одна строка s — текст объявления.
Формат вывода
Выведите одно число — сумму всех цифр (символов '0'..'9') в строке.
Ограничения
1 ≤ len(s) ≤ 2000- Строка может содержать любые символы (латинские/кириллические буквы, пробелы, знаки пунктуации, цифры).
Пример
Ввод:
Bus 24 arrives at 19:05
Вывод:
21Как решать — идея подхода
Приём: Линейный проход по строке + проверка символа
Ключевое наблюдение: нужно суммировать не числа вроде 12 или 105, а именно отдельные символы-цифры. То есть "12" даёт 1 + 2, а не 12.
Подходит линейный проход: длина строки до 2000, можно просто посмотреть каждый символ и решить, добавлять его или нет. Проверка «это цифра?» делается сравнением диапазона '0'..'9' или методом ch.isdigit() (но с ним осторожно, см. грабли).
План решения:
- Заведи переменную
ans = 0. - Пройди циклом по всем символам
chв строке. - Если
ch— цифра'0' <= ch <= '9', добавь её значение к ответу. - Как получить значение цифры:
ans += ord(ch) - ord('0')(илиans += int(ch)). - Выведи
ans.
Сложность: O(n) по времени, где n — длина строки, и O(1) по памяти.
Частая ошибка: пытаться выделять «числа» и суммировать их целиком (тогда пример 19:05 дал бы 24, а нужно 1+9+0+5=15). Ещё грабля: ch.isdigit() в Unicode считает цифрами не только '0'..'9', поэтому для этой задачи надёжнее проверка диапазона.
Разберись руками
Есть строка объявления: "Bus 24 arrives at 19:05". Нужно найти в ней все символы-цифры и сложить их как числа (2+4+1+9+0+5).
- Отметь в строке ВСЕ позиции, где стоят цифры (символы '0'..'9'). Индексация с 0.
- Теперь сложи значения найденных цифр: 2 + 4 + 1 + 9 + 0 + 5. Какое число получится?
- Что именно мы делали со строкой, чтобы получить сумму?
Идея: Просмотреть строку посимвольно, отбирать только символы-цифры и накапливать их сумму, превращая каждую цифру в число.
Решить задачу с автопроверкой на Python →
Куда дальше
- С нуля до олимпиады: маршрут — сколько занимает язык, какие приёмы нужны и к какому этапу это ведёт
- БВИ по олимпиадам: в какие вузы берут — правила приёма вузов, разобранные построчно, со ссылкой на приказ у каждой строки
- Перечневые олимпиады: что это и что дают — весь перечень Минобрнауки: уровни, срок диплома, разрезы по предметам и классам