Exercício "Matriz Quadrada I". Resolvi ele de formas diferentes e trago minhas soluções aqui para vocês!
Plataforma: URI (BEECROWD)
Problema: 1435
Enunciado:
Escreva um algoritmo que leia um inteiro N (0 ≤ N ≤ 100), correspondente a ordem de uma matriz M de inteiros, e construa a matriz de acordo com o exemplo abaixo.
Linguagens: C e C++
A lógica das soluções aqui apresentadas é diferente.
Código em C:
Na solução em C, calculei os valores de k para cada posição e imprimi k com formatação de três espaços. Um espaço adicional é inserido se j for diferente de zero, ou seja, se o valor impresso não estiver na primeira coluna.
#include <stdio.h> int main() { int n, i, j, k; while (scanf("%i", &n) != EOF) { if (n == 0) break; for (i = 0; i < n; i++) { for (j = 0; j < n; j++) { k = i + 1; if (j + 1 < k) k = j + 1; if (n - i < k) k = n - i; if (n - j < k) k = n - j; if (j) printf(" "); printf("%3i", k); } printf("\n"); } printf("\n"); } return 0; }
#include <iostream> #include <iomanip> using namespace std; int main() { int i, j, valorCentral, a, valorCopia, valor; while (1) { cin >> valor; int mat[valor][valor]; a = 0; valorCentral = valor / 2; valorCopia = valor; if (valor == 1) mat[0][0] = 1; while (a < valorCentral) { for (i = a; i < valorCopia; i++) { for (j = a; j < valorCopia; j++) { if (i==a || j==a || i==valorCopia-1 || j==valorCopia-1) mat[i][j] = a + 1; if (i == j && i == valorCentral && valor % 2 == 1) mat[i][j] = i + 1; } } a++; valorCopia--; } for (i = 0; i < valor; i++) { for (j = 0; j < valor - 1; j++) cout << setw(3) << mat[i][j] << " "; cout << setw(3) << mat[i][j] << endl; } if (valor != 0) cout << endl; else break; } return 0; }