이 문제에서는 문자열이 주어지고 Polybius Square Cipher를 사용하여 정수 암호화를 찾아야 합니다. .
폴리비우스 제곱 암호
문자를 숫자로 변환할 때 사용하는 표입니다. 영어 암호화를 위한 테이블은 5X5 테이블입니다. 즉, 영어 사전의 26개 알파벳에 대해 25개의 셀을 포함합니다. 문자 i와 j는 하나의 셀에 함께 보관됩니다.
다음 표는 폴리비우스 제곱 암호를 보여줍니다. -
| | 1 | 2 | 3 | 4 | 5 |
| 1 | A | B | C | D | E |
| 2 | F | G | H | I, J | K |
| 3 | L | M | N | O | P |
| 4 | Q | R | S | T | U |
| 5 | V | W | X | Y | Z |
테이블의 문자는 무작위로 지정할 수 있습니다. 또한 해당 언어의 알파벳 개수에 따라 표의 크기가 변경될 수 있습니다.
문제를 이해하기 위해 예를 들어보겠습니다.
입력 − 안녕하세요
출력 − 2315313134
이 문제를 해결하기 위해 각 숫자 쌍을 취하여 해당 문자를 확인하는 프로그램을 만들 것입니다.
예
솔루션의 예시를 보여주는 프로그램 −
#include <cmath>
#include <iostream>
using namespace std;
void LetterToNumber(string str) {
int R, C;
for (int i = 0; str[i]; i++) {
R = ceil((str[i] - 'a') / 5) + 1;
C = ((str[i] - 'a') % 5) + 1;
if (str[i] == 'k') {
R = R - 1;
C = 5 - C + 1;
}
else if (str[i] >= 'j') {
if (C == 1) {
C = 6;
R = R - 1;
}
C = C - 1;
}
cout<<R<<C;
}
cout << endl;
}
int main() {
string str = "tutorialspoint";
cout<<"The numeric encryption of string '"<<str<<"' is : ";
LetterToNumber(str);
return 0;
} 출력
The numeric encryption of string 'tutorialspoint' is: 4445443442241131433534243344