Cerința
Marian a fost foarte interesat de metoda divide et impera și a primit de la profesorul său o problemă : se dă o matrice de dimensiune 2
n
și ea trebuie parcursă după o anumită regulă bazată pe divide et impera . Pe baza a trei exemple , el trebuie să descopere regula și s-o aplice . Din păcate , acesta nu reusește și vă cere ajutorul . Vrea o rezolvare foarte eficienta atât din punct de vedere al timpului de execuție cât și a limitei de memorie .
Date de intrare
Fișierul de intrare matrice_div_et_imp.in
conține pe prima linie numărul n
, iar pe celelalte 2
n
linii câte 2
n
numere naturale nenule separate prin spații .
Date de ieșire
Fișierul de ieșire matrice_div_et_imp.out
va conține o linie cu cele 2
n
*2
n
numere ale matricei , parcurse după respectiva regulă .
Restricții și precizări
0 ≤ n ≤ 9
- numerele de pe a doua linie a fișierului de intrare vor fi mai mici decât
1.000.000.000
Exemplu 1 :
matrice_div_et_imp.in
1 1 2 3 4
matrice_div_et_imp.out
1 4 2 3
Exemplu 2 :
matrice_div_et_imp.in
2 15 12 13 14 36 56 34 58 98 80 79 11 10 43 47 50
matrice_div_et_imp.out
15 56 12 36 79 50 11 47 13 58 14 34 98 43 80 10
Exemplu 3 :
matrice_div_et_imp.in
3 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
matrice_div_et_imp.out
1 10 2 9 19 28 20 27 3 12 4 11 17 26 18 25 37 46 38 45 55 64 56 63 39 48 40 47 53 62 54 61 5 14 6 13 23 32 24 31 7 16 8 15 21 30 22 29 33 42 34 41 51 60 52 59 35 44 36 43 49 58 50 57
Observație pentru ultimul exemplu : toate numerele sunt pe o singură linie
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 Matrice_Div_Et_Imp:
#include <iostream>
#include <fstream>
using namespace std ;
ifstream f ("matrice_div_et_imp.in") ;
ofstream g ("matrice_div_et_imp.out") ;
int n , a[520][520] ;
void div_et_imp ( int colt_stanga_i , int colt_stanga_j , int colt_dreapta_i , int colt_dreapta_j )
{
if ( colt_dreapta_i == colt_stanga_i && colt_dreapta_j == colt_stanga_j )
g << a[colt_stanga_i][colt_stanga_j] << " " ;
else if ( colt_stanga_i < colt_dreapta_i && colt_stanga_j < colt_dreapta_j )
{
int mi = ( colt_dreapta_i + colt_stanga_i ) / 2 ;
int mj = ( colt_dreapta_j + colt_stanga_j ) / 2 ;
div_et_imp ( colt_stanga_i , colt_stanga_j , mi , mj ) ;
div_et_imp ( mi + 1 , mj + 1 , colt_dreapta_i , colt_dreapta_j ) ;
div_et_imp ( colt_stanga_i , mj + 1 , mi , colt_dreapta_j ) ;
div_et_imp ( mi + 1 , colt_stanga_j , colt_dreapta_i , mj ) ;
}
}
int main ()
{
int marime ;
f >> marime ;
n = 1 ;
for ( int i = 1 ; i <= marime ; ++i )
n = n * 2 ;
for ( int i = 1 ; i <= n ; ++i )
for ( int j = 1 ; j <= n ; ++j )
f >> a[i][j] ;
div_et_imp ( 1 , 1 , n , n ) ;
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 #1229 Matrice_Div_Et_Imp
Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #1229 Matrice_Div_Et_Imp 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!