Cho một đoạn mật thư đã được mã hóa thành những chuỗi
kí tự 0,1 với mỗi 5 kí tự số sẽ tương ứng với một kí tự trong bảng chữ cái
alphabel. Thứ tự bảng mã sẽ giống với bảng chữ cái alphabel (Ví dụ a=00001 thì
z=11010,a=01001 thì z=00001). Độ dịch của bảng mã sẽ là một số ngẫu nhiên từ 1
đến 100, bạn phải tìm ra để có được bảng mã đúng
Ví dụ: với a=00001
01111011001100101101100000100100001 0100110100 sẽ được
giải mã là “olympia it”
000110000110101
011000000100011 0001001111 000111000010100sẽ được giải mã là “cau lac bo cpt”
Input: file1.inp
Đoạn mật thư tối đa
100000 kí tự
Output: file1.out
#include<iostream>
#include<fstream>
#include<string>
using namespace std;
char dich(string s,int i)
{
if(s=="00000") return 97-i;
if(s=="00001") return 98-i;
if(s=="00010") return 99-i;
if(s=="00011") return 100-i;
if(s=="00100") return 101-i;
if(s=="00101") return 102-i;
if(s=="00110") return 103-i;
if(s=="00111") return 104-i;
if(s=="01000") return 105-i;
if(s=="01001") return 106-i;
if(s=="01010") return 107-i;
if(s=="01011") return 108-i;
if(s=="01100") return 109-i;
if(s=="01101") return 110-i;
if(s=="01110") return 111-i;
if(s=="01111") return 112-i;
if(s=="10000") return 113-i;
if(s=="10001") return 114-i;
if(s=="10010") return 115-i;
if(s=="10011") return 116-i;
if(s=="10100") return 117-i;
if(s=="10101") return 118-i;
if(s=="10110") return 119-i;
if(s=="10111") return 120-i;
if(s=="11000") return 121-i;
if(s=="11001") return 122-i;
if(s=="11010") return 123-i;
if(s=="11011") return 124-i;
if(s=="11100") return 125-i;
if(s=="11101") return 126-i;
if(s=="11110") return 127-i;
if(s=="11111") return 128-i;
return 48;
}
void main()
{
fstream t("file1.inp",ios::in);
fstream f("file1.out",ios::out);
string s,c;
char a;
int i,j;
for(int k=1;k<100;k++)
{
while(!t.eof())
{
getline(t,s);
i=0;
while(i<s.size())
{
c=s.substr(i,5);
i+=5;
a=dich(c,k);
f<<a;
if(s[i]==' ')
{
i++;
f<<" ";
}
}
f<<endl;
}
f<<endl;
t.clear();
t.seekg(0,ios::beg);
}
t.close();
system("pause");
}









.png)
.png)
.png)
.png)