Редакция для ASCII-профиль строки
Remember to use this editorial only when stuck, and not to copy-paste code from it. Please be respectful to the problem author and editorialist.
Submitting an official solution before solving the problem yourself is a bannable offence.
Submitting an official solution before solving the problem yourself is a bannable offence.
1. Идея
Нужно пройти по строке слева направо и для каждого символа вывести:
- сам символ;
- его ASCII-код.
ASCII-код символа — это его числовое представление.
Например, для 'A' это 65, для '0' это 48, для '!' это 33.
Значит, задача сводится к простому перебору всех символов строки.
2. Наблюдения
- Строка состоит только из печатных ASCII-символов без пробелов.
- Нужно сохранить порядок символов, значит обрабатывать их надо именно слева направо.
- Для каждого символа ответ независим от остальных символов.
- В Python ASCII-код символа удобно получать через
ord(c). - В C++ символ можно преобразовать к числу через приведение типа.
Пример: строка !~0Aa
Тогда по очереди получаем:
!→33~→1260→48A→65a→97
3. Алгоритм
- Считать строку
s. - Для каждого символа
cв строкеs:- вывести
c; - вывести пробел;
- вывести ASCII-код символа
c.
- вывести
- Каждый результат печатать на новой строке.
4. Почему это работает
По условию требуется для каждого символа строки вывести пару: сам символ и его ASCII-код.
Алгоритм перебирает все символы строки ровно по одному разу и в исходном порядке.
Для каждого символа он вычисляет его числовой код и сразу выводит нужную пару.
Значит:
- ни один символ не пропущен;
- порядок не нарушается;
- для каждого символа выводится именно требуемая информация.
Следовательно, алгоритм корректно строит ASCII-профиль строки.
5. Сложность
Пусть длина строки равна n.
- Время работы:
O(n), потому что каждый символ обрабатывается один раз. - Дополнительная память:
O(1), не считая памяти на хранение самой строки.
6. Код на C++17
#include <iostream>
#include <string>
using namespace std;
int main() {
string s;
cin >> s;
for (char c : s) {
cout << c << ' ' << (int)(unsigned char)c << '\n';
}
return 0;
}
7. Код на Python 3
s = input()
for c in s:
print(c, ord(c))
Комментарии