Pesquisar este blog

Livros Recomendados

Mostrando postagens com marcador 1435. Mostrar todas as postagens
Mostrando postagens com marcador 1435. Mostrar todas as postagens

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

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