Космический исследователь Салли хочет отправить сообщение Чужому союзнику. Они знают, что инопланетный алфавит состоит из 26 различных возрастающих чисел (L_i), которые напрямую соотносятся с буквами английского алфавита (таким образом, наименьшее число будет «A», а наибольшее - «Z»). Элли отправляет Салли алфавит пришельцев, но, к сожалению, Салли получает его не в порядке. Помогите Салли преобразовать сообщение на иностранный язык, заменив каждую букву соответствующим ей числом.
Чтобы увидеть или попытаться решить проблему полностью, зарегистрируйтесь здесь, затем нажмите здесь.
Решение
По сути, это проблема реализации. Мы должны правильно сопоставить английский алфавит с серией чисел и применить это сопоставление к сообщению, чтобы решить проблему.
Наша первая цель - правильно сопоставить алфавит с числами. Мы знаем, что инопланетный алфавит таков, что наименьшее число - это первая буква, второе наименьшее - второе, третье наименьшее - третья буква и т. Д. Однако нам даются несортированные числа. Таким образом, чтобы определить порядок, мы должны начать с сортировки чисел L_i. Это может быть выполнено с помощью вызова встроенной функции сортировки или уникальной функции. Обратите внимание, что всего 26 букв, эффективность сортировки не имеет значения.
После того, как мы отсортировали числа, кодирование сообщения становится довольно простым. Для каждого символа в сообщении, например, «d», найдите его индекс в алфавите (для этого можно использовать коды ASCII). Затем мы знаем, что это сопоставляется с числом в этом индексе в отсортированном списке чисел, и можем распечатать эти значения в качестве нашего окончательного зашифрованного сообщения.
Код
Ниже мое решение на C ++.
#include <iostream>
#include <algorithm> //sort
using namespace std;
string s;
int nums[26];
int main() {
cin >> s;
for(int i = 0; i < 26; i++) cin >> nums[i];
sort(nums, nums+26);
for(int i = 0; i < s.length(); i++) {
if(s[i] != ' ') cout << nums[s[i]-'a'] << " ";
}
cout << endl;
}