👤

Cerința
Un text s de lungime 2•n, unde n este un număr natural par, este codificat în felul următor: se construieşte o matrice pătratică de dimensiune n•n în care primele n caractere ale lui s se găsesc în ordine, de sus în jos, pe diagonala secundară a matricei, iar următoarele n caractere, în ordine, de sus în jos, pe diagonala principală. Restul caracterelor matricei sunt generate aleator. Matricea este transformată într-un şir de caractere cod(s) prin concatenarea şirurilor de caractere reprezentate de liniile acesteia (în ordine, de sus în jos).
Scrieţi un program care, citind din fişierul de intrare şirul de caractere cod(s), execută operaţia de decodificare descrisă mai sus şi afişează textul iniţial s (care a fost codificat) în fişierul de ieşire.

Date de intrare
Fișierul de intrare decodificare.in conține pe prima linie numărul n, iar pe a doua linie un şir format din (n2)2 caractere (litere mari sau mici ale alfabetului englez), reprezentând cod(s).

Date de ieșire
Fișierul de ieșire decodificare.out va conține pe prima linie şirul decodificat.

Restricții și precizări
1 ≤ n ≤ 3000
Recomandare: pentru tablourile de dimensiuni mari, folosiţi variabile globale.
Exemplu:
decodificare.in

8
TPQAREDSXMRYIUVE
decodificare.out

ADMITERE
Explicație
Matricea de codificare este

T P Q A
R E D S
X M R Y
I U V E
#1487


Răspuns :

#include <fstream>

using namespace std;

char diag_principala[3000];

char diag_secundara[3000];

int main(){

 ifstream fin("decodificare.in");

 ofstream fout("decodificare.out");

   

 int n;

 fin >> n;

 char c;

 for(int i = 0; i < n/2; i++){

   for(int j = 0; j < n/2; j++){

     fin >> c;

     if(i == j)diag_principala[i] = c;

     if(i + j == (n-1)/2)diag_secundara[i] = c;

   }

 }

 fin.close();

 fout << diag_secundara << diag_principala;

 fout.close();

 return 0;

}