Contornos da matriz

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

Share

Deixe um comentário

O seu endereço de e-mail não será publicado.

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.