Cerința
Considerăm codificarea binară a caracterelor, în care fiecărui simbol îi revine reprezentarea pe 8 biţi a codului său ASCII. De exemplu, caracterului 'A', având codul ASCII 65, îi va corespunde reprezentarea binară 01000001. Astfel, un cuvânt C poate fi reprezentat binar, sub forma unui tablou bidimensional, în care fiecare linie i a tabloului reprezintă codificarea binară a literei de pe poziţia i din C, tabloul având în final atâtea linii câte litere are cuvântul, şi 8 coloane.
Scrieţi un program care, citind de la tastatură cuvântul C, construieşte în memorie matricea reprezentării binare, şi afişează pe ecran dimensiunea celei mai mari submatrici pătratice conţinând elemente având toate aceeaşi valoare (fie 0, fie 1).
Date de intrare
Programul citește de la tastatură cuvântul C
Date de ieșire
Programul va afișa pe ecran dimensiunea maximă cerută.
Restricții și precizări
- cuvântul are cel mult
100de caractere, litere mari şi/sau mici ale alfabetului englez
Exemplu
Intrare
IDEEA
Ieșire
3
Explicație
Pentru şirul de caractere IDEEA, matricea corespunzătoare va fi \(\scriptsize\begin{bmatrix}
0&1&0&0&1&0&0&1\\
0&1&\underline{0}&\underline{0}&\underline{0}&1&0&0 \\
0&1&\underline{0}&\underline{0}&\underline{0}&1&0&1 \\
0&1&\underline{0}&\underline{0}&\underline{0}&1&0&1 \\
0&1&0&0&0&0&0&1
\end{bmatrix}\). Submatricea pătratică de dimensiune maximă este cea cu elementele subliniate.
Cum e corect?
cout < "As la info";
cout << "As la info";
cout >> "As la info";
Felicitări! Poți mai mult?
Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.
Greșit, dar nu-i bai!
Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.
Rezolvare
Iată rezolvarea de 100 de puncte pentru problema dim_maxim_binar:
// o posibila solutie de 100p pentru problema dim_maxim_binar #1459 @pbinfo.ro
// ideile prezentate pot fi imbunatatite
// compilat cu Code::Blocks 13.12
#include <iostream> // std::cin, std::cout
#include <cstring> // strlen
using namespace std;
int matriceBinara[105][10], numarLinii, numarColoane;
char cuvant[105];
//-------------------------------------------------------------------------------------------------------
// functie care returneaza, prin intermediul parametrului vect (vector de numere intregi), codificarea binara a
// caracterului transmis prin intermediul parametrului caracter (de tip char)
void charToInt(char caracter, int vect[]) {
int ordinAscii = (int) caracter;
for(int i = 8; i >= 1; i--) {
vect[i] = ordinAscii % 2;
ordinAscii /= 2;
}
}
//-------------------------------------------------------------------------------------------------------
// transforma matriceBinara (declarata global) in reprezentarea binara a cuvantului citit de la tastatura
void transformareMatrice()
{
int lungime = strlen(cuvant), vect_local[10];
for(int i = 1; i <= lungime; i++) {
charToInt(cuvant[i-1], vect_local);
for(int j = 1; j <= 8; j++)
matriceBinara[i][j] = vect_local[j];
}
// stabilirea dimensiunilor
numarLinii = lungime; // lungimea cuvantului
numarColoane = 8;
}
//-------------------------------------------------------------------------------------------------------
// verifica daca submatricea patratica, delimitata de (i_start, j_start) (colt stanga sus) si
// (i_final, j_final) (colt dreapta jos) are toate elementele egale (0 sau 1)
bool verificareSubmatrice(int i_start, int i_final, int j_start, int j_final)
{
for(int i = i_start; i <= i_final; i++)
for(int j = j_start; j <= j_final; j++)
if(matriceBinara[i][j] != matriceBinara[i_start][j_start])
return false;
return true;
}
//-------------------------------------------------------------------------------------------------------
// subprogram care returneaza dimensiunea celei mai mari submatrici patratice avand toate elementele egale
int secventaMaxima()
{
int secventa_max = 1;
// parcurgem matricea binara, fara ultima linie si ultima coloana
for(int i = 1; i < numarLinii; i++)
for(int j = 1; j < numarColoane; j++)
// parcurgem toate submatricile patratice posibile, pornind de la pozitia (i, j)
for(int _i = i + 1, _j = j + 1; _i <= numarLinii && _j <= numarColoane; _i++, _j++)
if(verificareSubmatrice(i, _i, j, _j)) { // submatricea are toate elementele egale
if(_i - i + 1 > secventa_max)
secventa_max = _i - i + 1;
}
else
break; // oprim for-ul, deoarece nu mai are rost sa continuam cu el
return secventa_max;
}
//-------------------------------------------------------------------------------------------------------
// Programul principal
int main(void)
{
cin >> cuvant;
transformareMatrice();
cout << secventaMaxima();
return 0;
}
Atenție
Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa
.
Rezolvarea problemei #1459 dim_maxim_binar
Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #1459 dim_maxim_binar de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.
Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!