Pentru codificarea textului unui mesaj s-a folosit codificarea ASCII, asociindu-se literelor mari ale alfabetului englez numerele distincte de la 65
la 90
, literelor mici ale alfabetului englez numerele distincte de la 97
la 122
, spaţiului numărul 32
, iar punctului (.
) numărul 46
.
Fiecare linie a mesajului ce urmează a fi codificat, are cel mult 80
de caractere, textul lui fiind format din cuvinte separate printr-un singur spaţiu sau printr-un singur punct, iar cuvintele sunt formate numai din litere ale alfabetului
Codificarea textului mesajului este realizată astfel: fiecare cuvânt din text se scrie în ordine inversă, înlocuindu-se fiecare caracter cu şirul rezultat prin scrierea în ordine inversă a codului asociat acestuia. De exemplu codificarea caracterului z
este şirul 221
. Aceeaşi regulă de codificare se aplică atât spaţiului cât şi punctului.
Textul rezultat în urma codificării va conţine doar cifre, fără spaţii şi fără simboluri de punctuaţie.
Cerința
să se scrie un program care să citească codificarea textului unui mesaj, să decodifice textul şi să afișeze rezultatul decodificării.
Date de intrare
Fișierul de intrare cod.in
conține conţine mai multe linii pe care sunt scrise doar cifre.
Date de ieșire
Fișierul de ieșire cod.out
va conține un număr de linii egal cu numărul de linii din fişierul de intrare, fiecare linie conţinând decodificarea liniei corespunzătoare din fişierul de intrare.
Restricții și precizări
- fișierul de intrare va conține maximum
18
, fiecare linie conținând maximum18
cifre
Exemplu
cod.in
79001795012119015018019723101001237999501611799014111112010113764 9989796410100164 4111116119910138
cod.out
Olimpiada de Informatica. abc.de. Sector
#include <bits/stdc++.h> using namespace std; ifstream cin("cod.in"); ofstream cout("cod.out"); char s[1001]; bool valid(int n) { if(n == '.') return 1; if(n == ' ') return 1; if((n >= 'A' && n <= 'Z') || (n >= 'a' && n <= 'z')) return 1; return 0; } int ogl(int n) { int ogl=0; while(n) ogl=ogl*10+n%10 , n/=10; return ogl; } int main() { while(cin>>s) { int i = 0; int cnt = 0; int nr = 0 , p = 1; char v[200]="" ; int n = 0; while(s[i]!='\0') { nr+=(s[i]-48) * p; p*=10; cnt++; if(cnt%2==0) if(!valid(nr)) i++ , nr+=(s[i]-48) * p; if(cnt%2==0) { v[++n]=nr; nr=0; p=1; } i++; } for(int i = 1 ; i <= n+1 ; ++i) { if(v[i]=='.' || v[i]==' ' || v[i]=='\0') { int j = i-1; while(v[j]!='.' && v[j]!=' ' && j > 0) { cout << (char)v[j]; j--; } if(v[i]!='\0') cout << (char)v[i]; } } cout << endl; } return 0; }