Вам дана исходная строка: software developer. Каждый буквенный символ строки изменяется по следующему алгоритму:
1. Вычисляется его порядковый номер в алфавите (буквы в алфавите нумеруются с 1).
2. Найденный порядковый номер умножается на 2.
3. Если полученное число больше 26, то из него вычитается 26.
4. Вместо исходной буквы записывается буква с вычисленным порядковым номером.
Для каждого буквенного символа строки алгоритм был выполнен
2024 раза. Необходимо определить, сколько уникальных буквенных символов получилось в итоговой строке.
В ответ необходимо указать количество уникальных буквенных символов.
#include <iostream>
#include <string>
#include <set>
void algorithm(std::string&);
int main() {
std::string str { "software developer" };
for (std::size_t i = 0; i < 2024; i++)
algorithm(str);
std::cout << str << std::endl;
std::cout << std::set<char>(str.begin(), str.end()).size() << std::endl;
}
inline std::size_t position(char c) {
return c - 'a' + 1;
}
inline char letter(std::size_t position) {
return position - 1 + 'a';
}
void algorithm(std::string &str) {
for (auto &i : str) {
auto pos = position(i);
pos *= 2;
if (pos > 26)
pos -= 26;
i = letter(pos);
}
}
letter
или position
?#include <iostream>
#include <string>
#include <set>
void algorithm(char&);
inline bool processable(char c) {
return std::isalpha(static_cast<unsigned char>(c));
}
int main() {
std::string str { "software developer" };
for (auto &i : str)
if (processable(i))
for (std::size_t counter = 0; counter < 2024; counter++)
algorithm(i);
std::set<char> unique;
for (const auto &i : str)
if (processable(i))
unique.insert(i);
std::cout << unique.size() << std::endl;
}
inline std::size_t position(char c) {
return c - 'a' + 1;
}
inline char letter(std::size_t position) {
return position - 1 + 'a';
}
void algorithm(char &i) {
auto pos = position(i);
pos *= 2;
if (pos > 26)
pos -= 26;
i = letter(pos);
}