Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sr.Hozuki

Algoritmo de Matriz Quadrada

Recommended Posts

Alguém poderia me ajudar com esse algoritmo. O enunciado é o seguinte :

 

Neste programa seu trabalho é ler um valor inteiro que será o tamanho da matriz quadrada (largura e altura) que será preenchida da seguinte forma: a parte externa é preenchida com 0, a parte interna é preenchida com 1, a diagonal principal é preenchida com 2, a diagonal secundária é preenchida com 3 e o ponto central contém o valor 4, conforme os exemplos abaixo.

Obs: o quadrado com '1' sempre começa na posição tamanho/3, tanto na largura quanto quanto na altura. A linha e a coluna começam em zero (0).

Entrada

A entrada contém vários casos de teste e termina com EOF (fim de arquivo. Cada caso de teste consiste de um valor inteiro ímpar N (5 ≤ N ≤ 101) que é o tamanho da matriz.

Saída

Para cada caso de teste, imprima a matriz correspondente conforme o exemplo abaixo. Após cada caso de teste, imprima uma linha em branco.

 

  Caso eu digite 5, a matriz tem que dar esse resultado :


 

20003
01110
01410
01110
30002
Se eu digitar 11, tem que ter esse resultado :
20000000003
02000000030
00200000300
00011111000
00011111000
00011411000
00011111000
00011111000
00300000200
03000000020
30000000002

 

Obs : Eu consegui resolver apenas a parte das diagonais principais e secundaria, mas não faço a minima ideia de como criar esse quadradinho com "1" dentro da matriz.

Compartilhar este post


Link para o post
Compartilhar em outros sites
#include <iostream>
using namespace std;

void mostraMatriz(int m[][102], int tamanho)
{

	for(int y = 0; y < tamanho; y++)
	{
		for(int x = 0; x < tamanho; x++)
		{

			cout << "" << m[y][x];
		}
		cout << endl;
	}
}

int main(int argc, char *argv[])
{
	int n, fim, centro, ind1par, ind1impar, fim1impar, fim1par, centroAux, iniDiagonalSecundaria;
	while (cin >> n)
	{
		ind1impar = n / 3;
		ind1par = ind1impar - 1;
		fim = n - 1;
		iniDiagonalSecundaria = n - 1;

		//Preenche a matriz toda com 0
		int matriz[102][102] = {{0}};

		//Guarda em centro o índice do centro
		centro = n / 2;
		centroAux = centro - 1;
		fim1impar = n - ind1impar - 1;
		fim1par = n - ind1impar;

		//Percorre a matriz
		for(int i = 0; i < n; i++)
		{
			for(int j = 0; j < n; j++)
			{
				//Se o tamanho for ÍMPAR
				if (n % 2 != 0)
				{
					//Preenche o centro com o 4
					if (i == centro && j == centro)
					{
						matriz[centro][centro] = 4;
					}
					//Preenche com 1
					else if (i >= ind1impar && j >= ind1impar && i <= fim1impar && j <= fim1impar)
					{
						matriz[i][j] = 1;
//						cout << matriz[i][j];
					}

					//Preenche com 2
					else if (i == j)// && !(i >= ind1impar && j >= ind1impar && i <= fim1impar && j <= fim1impar))
					{
						matriz[i][j] = 2;
//						cout << matriz[i][j];
					}
					//Preenche com 3
					else if (j == iniDiagonalSecundaria)
					{
						matriz[i][j] = 3;
//						cout << matriz[i][j];
						//iniDiagonalSecundaria--;
					}
				}
				//Se o tamanho for PAR
				else
				{
					//Preenche o centro com 4
					if ((i == centro && j == centro) || (i == centroAux && j == centroAux) || (i == centroAux && j == centro) || (i == centro && j == centroAux))
					{
						matriz[centro][centro] = 4;
						matriz[centroAux][centroAux] = 4;
						matriz[centroAux][centro] = 4;
						matriz[centro][centroAux] = 4;
					}
					//Preenche com 1
					else if (i >= ind1par && j >= ind1par && i <= fim1par && j <= fim1par)
					{
						matriz[i][j] = 1;
//						cout << matriz[i][j];
					}
					//Preenche com 2
					else if (i == j)// && !(i >= ind1par && j >= ind1par && i <= fim1par && j <= fim1par))
					{
						matriz[i][j] = 2;
//						cout << matriz[i][j];
					}
					//Preenche com 3
					else if (j == iniDiagonalSecundaria)
					{
						matriz[i][j] = 3;
//						cout << matriz[i][j];
						//iniDiagonalSecundaria--;
					}
				}
				cout << matriz[i][j];
				if (j == fim) iniDiagonalSecundaria--;
			}
			cout << endl;
		}
		cout << endl;
		//mostraMatriz(matriz, n);
	}

	return 0;
}

https://www.urionlinejudge.com.br/judge/pt/problems/view/1827

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por leubeck
      Boa noite a todo(a)s do Fórum , sou novo aqui e venho solicitar uma ajuda na criação de uma matriz para ser exibida na tela pelo java.
      Estou com dificuldades por nunca ter programado na vida, e confesso estar gostando muito por sinal.
      Mas foi passado uma tarefa na faculdade que achei até um pouco difícil e acredito que para vocês que já são experts não será, sem delongas vou ao assunto de pedido de ajuda.
       
      1 - Eu preciso criar uma matriz que ela determine se é quadrada ou não.
       
      2 - Se ela não for apresente uma mensagem de erro e feche o programa.
       
      3 - Se ela for uma matriz quadrada, que determine se é do tipo : Diagonal, Identidade, Simétrica, Triangular superior ou Inferior.
       
      Então é isto gente, espero que consiga ajuda de vocês, eu estou usando o programa (eclipse).
      Tenham uma boa noite e fiquem com deus.
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.