


Исправить код на С++
Разведкой был перехвачен ряд шифровок, которые передавал Джеймс Бонд. Известно, что каждое послание зашифровано методом циклического сдвига. Суть которого в том, что каждая буква заменяется на букву, отстоящую в алфавите от первой на определенном расстоянии. Это расстояние называется знаменателем шифра. Так, при знаменателе шифра 2 буква D превратится в F, буква Q – в S, а Z – в B. Известно, что Бонд использует знаменатели от 0 до 25, и составляет послания исключительно из заглавных букв английского алфавита. Знаменатели в шифровках постоянно меняются, так что расшифровать содержимое послания будет не просто. После тщательного анализа удалось примерно определить предмет посланий. Теперь для каждого послания точно известно одно из входящих туда слов.
Входные данные
В первой строке входного файла INPUT.TXT содержится строка с перехваченным посланием, а во второй строке – слово, которое обязательно присутствует в этом послании. Обе строки состоят только из заглавных английских букв и содержат от 1 до 40 символов.
Выходные данные
В выходной файл OUTPUT.TXT выведите расшифрованный текст, либо сообщение «IMPOSSIBLE», если разгадать шифровку невозможно. В тех случаях, когда расшифровка возможна с различными знаменателями, то следует вывести вариант с наименьшим таким значением.
Примеры
№ INPUT.TXT OUTPUT.TXT
1 HELLOAMERICA
AMERICA HELLOAMERICA
2 KHOORDPHULFD
HELLOAMERICA HELLOAMERICA
3 KHOORDPHULFD
KHOORDPHULFC IMPOSSIBLE
#include <iostream>
#include <string>
using namespace std;
int main() {
string sypher, word, formatted;
cin >> sypher >> word;
for (int i = 0; i <= 26; i++) {
formatted = "";
for (int j = 0; j < sypher.size(); j++) {
formatted += 'A' + (sypher[j] + i) % 26;
}
if (formatted.find(word) != -1) {
cout << formatted;
return 0;
}
}
cout << "IMPOSSIBLE";
}
Ошибка в скрытом тесте.
пробуй так
#include <iostream>
#include <string>
using namespace std;
int main() {
string sypher, word, formatted;
cout << "Введите шифр: ";
cin >> sypher;
cout << "Введите слово: ";
cin >> word;
for (int i = 0; i < 26; i++) {
formatted = "";
for (int j = 0; j < sypher.size(); j++) {
formatted += 'A' + (sypher[j] - 'A' + i) % 26;
}
if (formatted == word) {
cout << "Найденное совпадение: " << formatted;
return 0;
}
}
cout << "Совпадение не найдено.";
return 0;
}
formatted += 'A' + (sypher[j] - 'A' + i) % 26;