F003A. Matrius pentadiagonals P55168


Statement
 

pdf   zip

html

Una matriu quadrada es diu pentadiagonal si tots els elements fora de la diagonal principal i de les dues diagonals per sobre i per sota de la diagonal principal són 0.

Per exemple, la matriu de l’esquerra és pentadiagonal, però la de la dreta no (sí que ho seria si els 9 de la segona i sisena fila fóssin 0).

2 ‍ ‍0 ‍ ‍1 ‍ ‍0 ‍ ‍0 ‍ ‍0 ‍ ‍0 ‍ ‍0 ‍ ‍0 ‍ ‍0     5 ‍ ‍6 ‍ ‍7 ‍ ‍0 ‍ ‍0 ‍ ‍0 ‍ ‍0 ‍ ‍0 ‍ ‍0 ‍ ‍0
9 ‍ ‍4 ‍ ‍1 ‍ ‍1 ‍ ‍0 ‍ ‍0 ‍ ‍0 ‍ ‍0 ‍ ‍0 ‍ ‍0     1 ‍ ‍7 ‍ ‍3 ‍ ‍6 ‍ ‍0 ‍ ‍0 ‍ ‍0 ‍ ‍9 ‍ ‍0 ‍ ‍0
1 ‍ ‍1 ‍ ‍5 ‍ ‍1 ‍ ‍5 ‍ ‍0 ‍ ‍0 ‍ ‍0 ‍ ‍0 ‍ ‍0     1 ‍ ‍7 ‍ ‍0 ‍ ‍7 ‍ ‍3 ‍ ‍0 ‍ ‍0 ‍ ‍0 ‍ ‍0 ‍ ‍0
0 ‍ ‍6 ‍ ‍3 ‍ ‍2 ‍ ‍5 ‍ ‍1 ‍ ‍0 ‍ ‍0 ‍ ‍0 ‍ ‍0     0 ‍ ‍8 ‍ ‍7 ‍ ‍8 ‍ ‍1 ‍ ‍4 ‍ ‍0 ‍ ‍0 ‍ ‍0 ‍ ‍0
0 ‍ ‍0 ‍ ‍2 ‍ ‍1 ‍ ‍5 ‍ ‍1 ‍ ‍1 ‍ ‍0 ‍ ‍0 ‍ ‍0     0 ‍ ‍0 ‍ ‍8 ‍ ‍2 ‍ ‍1 ‍ ‍4 ‍ ‍1 ‍ ‍0 ‍ ‍0 ‍ ‍0
0 ‍ ‍0 ‍ ‍0 ‍ ‍1 ‍ ‍9 ‍ ‍0 ‍ ‍9 ‍ ‍9 ‍ ‍0 ‍ ‍0     0 ‍ ‍0 ‍ ‍9 ‍ ‍5 ‍ ‍1 ‍ ‍4 ‍ ‍1 ‍ ‍1 ‍ ‍0 ‍ ‍0
0 ‍ ‍0 ‍ ‍0 ‍ ‍0 ‍ ‍5 ‍ ‍1 ‍ ‍1 ‍ ‍1 ‍ ‍8 ‍ ‍0     0 ‍ ‍0 ‍ ‍0 ‍ ‍0 ‍ ‍1 ‍ ‍4 ‍ ‍4 ‍ ‍5 ‍ ‍6 ‍ ‍0
0 ‍ ‍0 ‍ ‍0 ‍ ‍0 ‍ ‍0 ‍ ‍5 ‍ ‍1 ‍ ‍5 ‍ ‍2 ‍ ‍4     0 ‍ ‍0 ‍ ‍0 ‍ ‍0 ‍ ‍0 ‍ ‍6 ‍ ‍8 ‍ ‍7 ‍ ‍7 ‍ ‍2
0 ‍ ‍0 ‍ ‍0 ‍ ‍0 ‍ ‍0 ‍ ‍0 ‍ ‍4 ‍ ‍5 ‍ ‍4 ‍ ‍4     0 ‍ ‍0 ‍ ‍0 ‍ ‍0 ‍ ‍0 ‍ ‍0 ‍ ‍8 ‍ ‍4 ‍ ‍0 ‍ ‍0
0 ‍ ‍0 ‍ ‍0 ‍ ‍0 ‍ ‍0 ‍ ‍0 ‍ ‍0 ‍ ‍5 ‍ ‍5 ‍ ‍7     0 ‍ ‍0 ‍ ‍0 ‍ ‍0 ‍ ‍0 ‍ ‍0 ‍ ‍0 ‍ ‍7 ‍ ‍5 ‍ ‍5

Utilitzant la definició

typedef vector<vector<int> > Matriu;

implementeu la funció

bool es_pentadiagonal(const Matriu& mat);

que indica si |mat| és pentadiagonal o no.

Utilitzant també la definició

struct Info { int suma; int maxim; };

implementeu l’acció

void calcula(const Matriu& mat, Info& inf);

que deixa en els camps |suma| i |maxim| del paràmetre de sortida |inf| la suma i el màxim de tots els elements de |mat|, sota la precondició que |mat| és pentadiagonal.

El programa principal ja se us dóna implementat; no el canvieu. Aquest llegeix matrius quadrades d’enters i, per a cadascuna, si la matriu és pentadiagonal escriu la suma i el màxim dels seus elements; altrament escriu que no ho és.

Precondició

Les matrius |mat| són n× n amb n≥6.

Public test cases
  • Input

    10
    2 0 1 0 0 0 0 0 0 0
    9 4 1 1 0 0 0 0 0 0
    1 1 5 1 5 0 0 0 0 0
    0 6 3 2 5 1 0 0 0 0
    0 0 2 1 5 1 1 0 0 0
    0 0 0 1 9 0 9 9 0 0
    0 0 0 0 5 1 1 1 8 0
    0 0 0 0 0 5 1 5 2 4
    0 0 0 0 0 0 4 5 4 4
    0 0 0 0 0 0 0 5 5 7
    
    10
    5 6 7 0 0 0 0 0 0 0
    1 7 3 6 0 0 0 9 0 0
    1 7 0 7 3 0 0 0 0 0
    0 8 7 8 1 4 0 0 0 0
    0 0 8 2 1 4 1 0 0 0
    0 0 9 5 1 4 1 1 0 0
    0 0 0 0 1 4 4 5 6 0
    0 0 0 0 0 6 8 7 7 2
    0 0 0 0 0 0 8 4 0 0
    0 0 0 0 0 0 0 7 5 5
    
    6
    -1  0  1  0  0  0
     0 -1  0  1  0  0
     1  0 -1  0  1  0
     0  1  0 -1  0  1
     0  0  1  0 -1  0
     0  0  0  1  0 -1
    
    6
    -17 -17 -17   0   0   0
    -17 -17 -17 -17   0   0
    -17 -17 -17 -17 -17   0
      0 -17 -17 -17 -17 -17
      0   0 -17 -17 -17 -17
      0   0   0 -17 -17 -17
    

    Output

    153 9
    no es pentadiagonal
    2 1
    -408 0
    
  • Information
    Author
    Professorat de P1
    Language
    Catalan
    Other languages
    English
    Official solutions
    C++
    User solutions
    C++