Задача
Зашифруйте текст из входного потока, заменяя каждый символ результатом сложения по модулю два его кода и кода предыдущего символа текста. Первый символ шифровать не нужно.
Входные данные
Последовательность символов.
Выходные данные
Зашифрованная последовательность символов, напечатанная через пробел.
Тесты
входные данные | выходные данные |
pack my box with five dozen liquor jugs | p 11 2 8 4b 4d 14 59 42 d 17 58 57 1e 1d 1c 48 46 f 1f 13 45 44 b 15 1f b 4e 4c 5 18 4 1a 1d 52 4a 1f 12 14 |
Код программы
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#include <iostream> using namespace std; int main() { unsigned char a, b; scanf("%c", &b); cout<<b<<" "; while (scanf("%c", &a)) { if (a == '\n') break; printf("%x ", a^b); b=a; } return 0; } |
Решение задачи
Объявляем 2 символьные переменные. Считываем первый символ и выводим его. Остальные символы будут считываться в цикле, пока не произойдет переход на следующую строку.По мере ввода запоминаем старый символ во 2 переменной и складываем их по модулю 2 и выводим результат в шестнадцатеричной системе.
Ссылки
Подзадача — дешефратор
Написать программу, которая сможешь преобразовать полученный код обратно в текст.
Входные данный
Код полученный из выполнения основной задачи.
Выходные данные
Изначальный текст.
Тесты
входные данные | выходные данные |
p 11 2 8 4b 4d 14 59 42 d 17 58 57 1e 1d 1c 48 46 f 1f 13 45 44 b 15 1f b 4e 4c 5 18 4 1a 1d 52 4a 1f 12 14 | pack my box with five dozen liquor jugs |
Код задачи
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
#include <iostream> using namespace std; int main() { unsigned short a; unsigned char b; cin>>b; cout<<b; while (cin >> hex >> a) { b = a^b; cout << b; } return 0; } |
Решение задачи
Так как сложение по модулю 2 обратно само себе, то нам нужно считать символы в том же порядке и применить тот же алгоритм при шифровании.
Дополнил дешефратором
Отступы!