Pesquisar este blog

Livros Recomendados

domingo, 14 de fevereiro de 2021

URI (BEECROWD) - 1435 - Matriz Quadrada I - Iniciante - C e C++

Exercício "Matriz Quadrada I". Resolvi ele de formas diferentes e trago minhas soluções aqui para vocês!

Plataforma: URI (BEECROWD)

Problema1435

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++


Solução:

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;
}

Código em C++:

Nessa solução eu usei matrizes e fui me baseando pelo valor central da matriz para definir valores a+1 ou i+1. O tamanho do campo de entrada foi definido com setw.

#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;
}

Nenhum comentário:

Postar um comentário

Postagem em destaque

URI (BEECROWD) - 2158 - Helping Uncle Cláudio (Ajudando o Tio Cláudio) - Matemática - C, C++ e Haskell

Buenas! Estou aqui mais uma vez para resolver um problema de Matemática! Agora tenho resolvido alguns dessa categoria, pra que vocês possam ...

Postagens mais visitadas