Pesquisar este blog

Livros Recomendados

Mostrando postagens com marcador Matriz. Mostrar todas as postagens
Mostrando postagens com marcador Matriz. 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;
}

quarta-feira, 7 de outubro de 2020

URI - 1578 - Matriz de Quadrados - Ad-Hoc - C

Plataforma: URI

Problema1578

Enunciado:

Atrapalhilton é um estudante muito dedicado, embora muito, muito atrapalhado. Na semana passada, seu professor de Matemática, o Sr. Sabetudilton, recomendou à classe uma lista de exercícios sobre matrizes. Atrapalhilton, aplicado como é, dediciu fazer os exercícios no mesmo dia, tão logo chegou em casa, embora apenas após assistir o episódio vespertino de A Galinha Listradinha, seu programa de TV favorito. O enunciado de um dos exercícios dizia:

  • Calcule o quadrado de cada uma das matrizes abaixo…

No entanto, Atrapalhilton fez uma baita duma confusão. Para ele, o quadrado de uma matriz quadrada Aé a matriz dos quadrados dos valores da matriz A. Por exemplo, o quadrado da matriz

13
57

para ele não é

1624
4064

mas

19
2549

Atrapalhilton conseguiu calcular o “quadrado” da primeira matriz, da segunda, da terceira e percebeu que já estava muito tarde, que não ia conseguir terminar de calcular os “quadrados” de todas as matrizes da lista. Então, decidiu escrever um programa que fizesse o serviço para ele.


Linguagem: C

Solução: 

#include <stdio.h>

unsigned long long contaDigitos(unsigned long long valor) {
    int resposta = 1;
    
    while(valor > 9) {
        resposta++;
        valor /= 10;
    }

   return resposta;
}

int main() {
    int n, m, x = 4, i, j, k;
    unsigned long long valor, maior, tamanho;
    scanf("%i", &n);

    while(n--) {
        scanf("%i", &m);
        unsigned long long matriz[m][m], maiores[m];
        maior = 0;

        for (i = 0; i < m; i++) {
            for (j = 0; j < m; j++) {
                scanf("%llu", &valor);
                matriz[i][j] = valor * valor;
            }
        }

        for (j = 0; j < m; j++) {
            for (i = 0; i < m; i++) {
                tamanho = contaDigitos(matriz[i][j]);
                
                if (maior < tamanho)
                    maior = tamanho;
            }
            
            maiores[j] = maior;
            maior = 0;
        }

        if (x != 4)
            printf("\n");

        printf("Quadrado da matriz #%i:\n", x++);

        for (i = 0; i < m; i++) {
            for (j = 0; j < m; j++) {
                for (k=0; k<maiores[j]-contaDigitos(matriz[i][j]); k++)
                    printf(" ");

                printf("%llu", matriz[i][j]);

                if (j < m - 1)
                    printf(" ");
            }
            printf("\n");
        }
    }

    return 0;
}

terça-feira, 29 de setembro de 2020

URI - 1557 - Matriz Quadrada III - Iniciante - C++

Plataforma: URI

Problema1557

Enunciado:
Escreva um algoritmo que leia um inteiro N (0 ≤ N ≤ 15), correspondente a ordem de uma matriz M de inteiros, e construa a matriz de acordo com o exemplo.

Linguagem: C++

Solução:

#include <iostream>
#include <iomanip>
using namespace std;
int potencia2(short int expoente) {
    int resposta = 1;
    if (expoente == 0)
        return 1;
    while (expoente--) {
        resposta += resposta;
    }
    return resposta;
}
int maiorTamanho(int t) {
    int maiorNumero = potencia2(t + t - 2);
    int digitos = 1;
    while (maiorNumero > 9) {
        maiorNumero /= 10;
        digitos++;
    }
    return digitos;
}
int main() {
    int tamanho;
    int valor;
    while (1) {
        cin >> tamanho;
        if (tamanho == 0) break;
	int maior = maiorTamanho(tamanho);
        int linha = 0, coluna;
        while (linha < tamanho) {
            valor = potencia2(linha);
	    coluna = 0;
            while (coluna < tamanho) {
                if (coluna == 0)
                    cout<<fixed<<right<<setw(maior)<<valor;
                else
                    cout<<" "<<fixed<<right<<setw(maior)<< valor;
                valor += valor;
                coluna++;
            }
            cout << endl;
            linha++;
        }
        cout << endl;
    }
    return 0;
}

quinta-feira, 3 de setembro de 2020

URI - 1578 - Matriz de Quadrados - Ad-Hoc - C++

Plataforma: URI

Problema1578

Enunciado:

Atrapalhilton é um estudante muito dedicado, embora muito, muito atrapalhado. Na semana passada, seu professor de Matemática, o Sr. Sabetudilton, recomendou à classe uma lista de exercícios sobre matrizes. Atrapalhilton, aplicado como é, dediciu fazer os exercícios no mesmo dia, tão logo chegou em casa, embora apenas após assistir o episódio vespertino de A Galinha Listradinha, seu programa de TV favorito. O enunciado de um dos exercícios dizia:

  • Calcule o quadrado de cada uma das matrizes abaixo…

No entanto, Atrapalhilton fez uma baita duma confusão. Para ele, o quadrado de uma matriz quadrada Aé a matriz dos quadrados dos valores da matriz A. Por exemplo, o quadrado da matriz

13
57

para ele não é

1624
4064

mas

19
2549

Atrapalhilton conseguiu calcular o “quadrado” da primeira matriz, da segunda, da terceira e percebeu que já estava muito tarde, que não ia conseguir terminar de calcular os “quadrados” de todas as matrizes da lista. Então, decidiu escrever um programa que fizesse o serviço para ele.


Linguagem: C++

Solução: 

#include <iostream>
#include <iomanip>

using namespace std;

unsigned long long int contaDigitos(unsigned long long int valor) {
    int resposta = 1;
    
    while (valor > 9) {
        resposta++;
        valor /= 10;
    }
    
    return resposta;
}

int main() {
    
    int x = 4, n, m;
    
    cin >> n;
    
    while (n--) {
        cin >> m;
        unsigned long long int quadrados[m][m], valor, maiores[m];
        
        for (int i=0; i<m; i++) {
            for (int j=0; j<m; j++) {
                cin >> valor;
                quadrados[i][j] = valor * valor;
            }
        }
        
        if (x != 4)
            cout << endl;
            
        cout<<"Quadrado da matriz #"<<x++<<":"<<endl;

        for (int i=0; i<m; i++)
            maiores[i] = quadrados[0][i];

        for (int i=1; i<m; i++) {
            for (int j=0; j<m; j++) {
                if (maiores[j] < quadrados[i][j])
                    maiores[j] = quadrados[i][j];
            }
        }
     
        for (int i=0; i<m; i++)
            maiores[i] = contaDigitos(maiores[i]);
        
        for (int i=0; i<m; i++) {
            for (int j=0; j<m-1; j++)
                cout<<setw(maiores[j])<<right<<quadrados[i][j]<<" ";
            
            cout<<setw(maiores[m-1])<<right<<quadrados[i][m-1]<<endl;
        }
        
    }
    return 0;
}

quarta-feira, 2 de setembro de 2020

URI - 2757 - Entrada e Saída de Números Inteiros - Iniciante - C++

Plataforma: URI

Problema2757

Enunciado:
O seu professor gostaria que você fizesse um programa com as seguintes características:

  1. Crie três variáveis para armazenar números inteiros;
  2. Leia o primeiro número, que pode ser um valor na faixa de: -10000 ≤ A ≤ 10000;
  3. Leia o segundo número, que pode ser um valor na faixa de: 0 ≤ B ≤ 99;
  4. Leia o terceiro número, que pode ser um valor na faixa de: 0 ≤ C ≤ 999;
  5. Imprima a letra A, um espaço em branco, o sinal de igual, um espaço em branco, o número armazenado na primeira variável, uma virgula, um espaço em branco, a letra B, um espaço em branco, o sinal de igual, um espaço em branco, o número armazenado na segunda variável, uma virgula, um espaço em branco, a letra C, um espaço em branco, o sinal de igual, um espaço em branco, o número armazenado na terceira variável. Não esqueça de pular linha;
  6. Repita o procedimento 5, colocando o número em um espaçamento de 10 dígitos e justificado a direita;
  7. Repita o procedimento 5, colocando o número em um espaçamento de 10 dígitos e preenchido com zeros;
  8. Repita o procedimento 5, colocando o número em um espaçamento de 10 dígitos e justificado a esquerda.

Linguagem: C++

Solução:

#include <iostream>
#include <iomanip>
#include <cmath>

using namespace std;

int getSize(int n) {
    int digitos = 1;
    
    while (n > 9 || n < -9) {
        digitos++;
        n /= 10;
    }    
    
    return digitos;
}

void printZeros(int quantidade) {
    while (10 - (quantidade++) > 0)
        cout << "0";    
}

int main() {
    
    int a, b, c;
    cin >> a >> b >> c;
    
    cout << "A = " << a << ", B = " << b << ", C = " << c << endl;
    cout << "A = " << setw(10) << a << ", B = "
         << setw(10) << b << ", C = " << setw(10) << c << endl;
    
    int tamA = getSize(a), tamB = getSize(b), tamC = getSize(c);
    
    cout << "A = ";
    if (a < 0) {
        tamA++;
        cout << "-";
    }
    
    printZeros(tamA);
    cout << abs(a) << ", B = ";
    printZeros(tamB);
    cout << b << ", C = ";
    printZeros(tamC);
    cout << c << endl;
    
    cout << "A = " << setw(10) << left << a << ", B = "
         << setw(10) << b << ", C = " << setw(10) << c << endl;

    return 0;
}

segunda-feira, 31 de agosto de 2020

URI - 1181 - Linha na Matriz - Iniciante - C++

Plataforma: URI

Problema1181

Enunciado:
Neste problema você deve ler um número, indicando uma linha da matriz na qual uma operação deve ser realizada, um caractere maiúsculo, indicando a operação que será realizada, e todos os elementos de uma matriz M[12][12]. Em seguida, calcule e mostre a soma ou a média dos elementos que estão na área verde da matriz, conforme for o caso. A imagem abaixo ilustra o caso da entrada do valor 2 para a linha da matriz, demonstrando os elementos que deverão ser considerados na operação.

Linguagem: C++

Solução:

#include <iostream>
#include <iomanip>

using namespace std;

int main() {
    int l, i, j;
    char a;
    double m[12][12], s;
    
    cin >> l;
    cin >> a;
    
    for (i = 0; i < 12; i++) {
    
        for (j = 0; j < 12; j++) {
            
            cin >> m[i][j];
            
            if (i == l)
                s += m[l][j];
        }
    }
    if (a == 'M')
        s /= 12;
 
    cout<<fixed<<setprecision(1)<<s<<endl;   

    return 0;
}

domingo, 30 de agosto de 2020

URI - 1557 - Matriz Quadrada III - Iniciante - C++ - Com Matriz

Plataforma: URI

Problema1557

Enunciado:
Escreva um algoritmo que leia um inteiro N (0 ≤ N ≤ 15), correspondente a ordem de uma matriz M de inteiros, e construa a matriz de acordo com o exemplo.

Linguagem: C++

Solução:

#include <iostream>
#include <iomanip>

using namespace std;

int potencia(short int expoente) {
    int resposta = 1;
    
    if (expoente == 0)
        return 1;
        
    while (expoente--)
        resposta += resposta;

    return resposta;
}

int maiorTamanho(int t) {
    int maiorNumero = potencia(t + t - 2);
    int digitos = 1;
    
    while (maiorNumero > 9) {
        maiorNumero /= 10;
        digitos++;
    }
    return digitos;
}

int main() {
    int tamanho;
    int valor;
    
    while (1) {
        cin >> tamanho;
        int mat[tamanho][tamanho];
        if (tamanho == 0)
            break;
            
	int maior = maiorTamanho(tamanho);
        int linha = 0, coluna;
        
        while (linha < tamanho) {
            valor = potencia(linha);
	        coluna = 0;
	        
            while (coluna < tamanho) {
                mat[linha][coluna] = valor;
                
                if (coluna != 0)
                    cout << " ";
                    
                cout << fixed << right << setw(maior);
                cout << mat[linha][coluna];
                valor += valor;
                coluna++;
            }
            cout << endl;
            linha++;
        }      
        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