mistergks
23-01-2012, 12:48
Ho un problema col seguente esercizio:
Data una matrice NxN di numeri interi positivi, si dice che ha le “cornici decrescenti” se per ogni cornice, a partire da quella più esterna, ogni elemento è strettamente maggiore di ogni elemento di quella immediatamente più interna.
ESEMPIO: la matrice illustrata, nella quale, a beneficio del lettore, sono state evidenziate le cornici concentriche, non gode della proprietà su illustrata: infatti la seconda cornice contiene due elementi (quelli di valore 3 e 4, sottolineati in figura), che non sono più piccoli di ogni elemento della prima cornice. Anche la terza cornice viola la proprietà: l’unico elemento che ne fa parte, il 7, sottolineato in figura, non è più piccolo di ogni elemento della seconda cornice.
Si scriva in C++ una funzione che, ricevuta una matrice di numeri interi positivi, verifichi se questa ha le cornici decrescenti.
3 3 3 3 3
3 2 2 2 3
8 3 7 2 3
3 2 2 4 3
3 3 3 3 3
Ho provato a farlo...ma non riesco..
Ho pensato di trovare il massimo della cornice M[0][j], M[j][0], M[n][j], M[j][n] e di confrontarlo col massimo di M[1][j-2], M[j-2][1], M[n-1][j-2], M[j-2][n-1]... ecc...
cioè trovo il max della cornice piu' esterna e lo confronto col max della cornice successivamente piu' interna.. e cosi via fino ad arrivare al 7 dell'esempio..
L'approccio è corretto?
Finora sono riuscito a scrivere questo codice e non riesco ad andare avanti..:
#include <iostream>
using namespace std;
const int n=5;
void cornicidecresc(int M[][n], int n);
int main(){
int M[n][n]={{3,3,3,3,3},
{3,2,2,2,3},
{8,3,7,2,3},
{3,2,2,4,3},
{3,3,3,3,3}};
cornicidecresc(M,n);
system("pause");
return 0;
}
void cornicidecresc(int M[n][n], int n){
int max=M[0][0];
for(int j=0; j<n; j++){
//cout<<M[0][j]<<endl;
if(M[0][j] > max)
max=M[0][j];
}
}
Data una matrice NxN di numeri interi positivi, si dice che ha le “cornici decrescenti” se per ogni cornice, a partire da quella più esterna, ogni elemento è strettamente maggiore di ogni elemento di quella immediatamente più interna.
ESEMPIO: la matrice illustrata, nella quale, a beneficio del lettore, sono state evidenziate le cornici concentriche, non gode della proprietà su illustrata: infatti la seconda cornice contiene due elementi (quelli di valore 3 e 4, sottolineati in figura), che non sono più piccoli di ogni elemento della prima cornice. Anche la terza cornice viola la proprietà: l’unico elemento che ne fa parte, il 7, sottolineato in figura, non è più piccolo di ogni elemento della seconda cornice.
Si scriva in C++ una funzione che, ricevuta una matrice di numeri interi positivi, verifichi se questa ha le cornici decrescenti.
3 3 3 3 3
3 2 2 2 3
8 3 7 2 3
3 2 2 4 3
3 3 3 3 3
Ho provato a farlo...ma non riesco..
Ho pensato di trovare il massimo della cornice M[0][j], M[j][0], M[n][j], M[j][n] e di confrontarlo col massimo di M[1][j-2], M[j-2][1], M[n-1][j-2], M[j-2][n-1]... ecc...
cioè trovo il max della cornice piu' esterna e lo confronto col max della cornice successivamente piu' interna.. e cosi via fino ad arrivare al 7 dell'esempio..
L'approccio è corretto?
Finora sono riuscito a scrivere questo codice e non riesco ad andare avanti..:
#include <iostream>
using namespace std;
const int n=5;
void cornicidecresc(int M[][n], int n);
int main(){
int M[n][n]={{3,3,3,3,3},
{3,2,2,2,3},
{8,3,7,2,3},
{3,2,2,4,3},
{3,3,3,3,3}};
cornicidecresc(M,n);
system("pause");
return 0;
}
void cornicidecresc(int M[n][n], int n){
int max=M[0][0];
for(int j=0; j<n; j++){
//cout<<M[0][j]<<endl;
if(M[0][j] > max)
max=M[0][j];
}
}