Pesquisar este blog

Livros Recomendados

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

segunda-feira, 15 de fevereiro de 2021

URI (BEECROWD) - 1478 - Matriz Quadrada II - Iniciante - C e C++

Salve! Hoje vamos conhecer as soluções em C e C++ para o problema 1478 do Beecrowd, intitulado "Matriz Quadrada II". Ele é bem simples e a verdade é que nem precisa de uma matriz para resolvê-lo! Eu resolvi ele usando array (ok, um array é uma matriz unidimensional, mas não precisei declarar um array de duas dimensões, mxm).

Plataforma: URI (BEECROWD)

Problema1478

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:

Li um valor n e declarei um array com n valores. Todas as variáveis presentes no problema foram declaradas como short int porque acabam recebendo somente valores pequeno.

Para seguir o padrão solicitado, crio dois laços de repetição, um dentro do outro, percorrendo valores de 0 até n-1 como se fosse uma matriz. O valor da variável primeiro inicia em linha+2 para cada linha, e é atualizado de acordo com as condições (aumenta 1 se a linha for menor, diminui 1 se a linha for maior ou é igual a um se for igual). Fiz anda um teste pra saber se a coluna é zero, apenas para não imprimir o espaço na frente, algo que deve ser feito para os valores seguintes.

Código em C:

Aqui o único detalhe a ser ressaltado é que %3hd faz o valor ocupar três espaços, deixando a tabela corretamente formatada.

#include <stdio.h>

int main() {
    
    short int n = 1;
    
    while (1) {
        
        scanf("%hd", &n);
        
        if (n == 0) break;
        
        short int matriz[n], linha, coluna, primeiro = 1;
        
        for (linha = 0; linha < n; linha++) {
            
            primeiro = linha + 2;
        
            for (coluna = 0; coluna < n; coluna++) {
        
                if (linha < coluna)
                    primeiro++;
                    
                else if (linha > coluna)
                    primeiro--;

                else
                    primeiro = 1;

                if (coluna == 0)
                    printf("%3hd", primeiro);
        
                else
                    printf(" %3hd", primeiro);
            }
            
            printf("\n");
        }
        
        printf("\n");
    }

    return 0;
}

Código em C++:

Aqui a formatação foi feita com setw (define a largura), com 3 ou 4 caracteres conforme o caso (4 quando tiver o espaço na frente, ou seja, quando a coluna for diferente de um).

#include <iostream>
#include <iomanip>
using namespace std;
int main() {
    short int n = 1;
    while (1) {
        cin >> n;
        if (n == 0) break;
        short int linha, coluna, valor = 1;
        for (linha = 0; linha < n; linha++) {
            valor = linha + 2;
            for (coluna = 0; coluna < n; coluna++) {
                if (linha < coluna)
                    valor++;
                else if (linha > coluna)
                    valor--;
                else
                    valor = 1;
                if (coluna == 0)
                    cout << setw(3) << valor;
                else
                    cout << setw(4) << valor;
            }
            cout << endl;
        }
        cout << endl;
    }
    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