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"); }