Elabore um algoritmo que leia o tamanho de uma matriz m x n, gere e mostre a matriz preenchida, com as posições que fazem o contorno da matriz com o número 1 (primeira camada), a camada seguinte preencha com o número 2 e assim sucessivamente.
Exemplo: matriz 6 x 5
1 1 1 1 1
1 2 2 2 1
1 2 3 2 1
1 2 3 2 1
1 2 2 2 1
1 1 1 1 1
Solução em C/C++
#include <stdio.h>
int main(void) {
int lin, col, i, j, realizacoes, camada=0, camadasTotal;
scanf("%i %i", &lin, &col);
int mat[lin][col];
//ajusta as linhas
if (lin%2 == 0) {
camadasTotal = lin/2;
} else {
camadasTotal = lin/2 + 1;
}
for (camada=0; camada < camadasTotal; camada++) {
i=camada; //parte de cima da matriz
for (realizacoes=0; realizacoes<2; realizacoes++) {
j=camada;
for (j=camada; j < col-camada; j++) {
mat[i][j] = camada+1;
}
i=lin-1-camada; //parte de baixo da matriz
}
}
//ajusta as colunas
if (col%2 == 0) {
camadasTotal = col/2;
} else {
camadasTotal = col/2 + 1;
}
for (camada=0; camada < camadasTotal; camada++) {
j=camada; //parte da esquerda da matriz
for (realizacoes=0; realizacoes<2; realizacoes++) {
i=camada;
for (i=camada; i < lin-camada; i++) {
mat[i][j] = camada+1;
}
j=col-1-camada; //parte da direita da matriz
}
}
//mostra a matriz
for (i=0; i < lin; i++) {
for (j=0; j < col; j++) {
printf("%i ", mat[i][j]);
}
printf("\n");
}
return 0;
}
Teste o código: http://ideone.com/tnLOec