Pesquisar este blog

Livros Recomendados

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

sexta-feira, 5 de março de 2021

URI (BEECROWD) - 2163 - O Despertar da Força - Iniciante - C e C++

O Despertar da Força foi resolvido e postado aqui. Espero que aproveitem!

Plataforma: URI (BEECROWD)

Problema2163

Enunciado:

Há muito tempo atrás, em uma galáxia muito, muito distante...

Após o declínio do Império, sucateiros estão espalhados por todo o universo procurando por um sabre de luz perdido. Todos sabem que um sabre de luz emite um padrão de ondas específico: 42 cercado por 7 em toda a volta. Você tem um sensor de ondas que varre um terreno com N x M células. Veja o exemplo abaixo para um terreno 4 x 7 com um sabre de luz nele (na posição (2, 4)).

Você deve escrever um programa que, dado um terreno N x M, procura pelo padrão do sabre de luz nele. Nenhuma varredura tem mais do que um padrão de sabre de luz.

Linguagens: C e C++


Solução:

Basicamente era necessário percorrer a matriz e verificar se o valor atual era 42 e todos os seus vizinhos eram 7, incluindo as diagonais. Caso a condição seja satisfeita, imprime o valor dos próximos índices e colunas e interrompe os laços de repetição. Uma variável de controle foi criada para saber se houve esta impressão. Se não houver, imprimirá 0 0 no final. Esta lógica foi aplicada nos dois códigos, em C e C++.

Código em C:

#include <stdio.h>

int main() {
    int n, m, linha, coluna, flag = 1;
    scanf("%i %i", &n, &m);
    
    int valores[n][m];
    for (linha = 0; linha < n; linha++)
        for (coluna = 0; coluna < m; coluna++)
            scanf("%i", &valores[linha][coluna]);

    for (linha = 1; linha < n - 1; linha++) {
        for (coluna = 1; coluna < m - 1; coluna++) {
            if (valores[linha][coluna] == 42 && valores[linha-1][coluna] == 7
            && valores[linha+1][coluna] == 7 && valores[linha][coluna-1] == 7 
            && valores[linha][coluna+1] == 7 && valores[linha-1][coluna-1] == 7
            && valores[linha-1][coluna+1] == 7 && valores[linha+1][coluna-1] == 7
            && valores[linha+1][coluna+1] == 7) {
                printf("%i %i\n", linha+1, coluna+1);
                flag = 0;
                break;
            }
        }
    }
    if (flag)
        printf("0 0\n");

    return 0;
}

Código em C++:

#include <iostream>

using namespace std;

int main() {
    int n, m, linha, coluna, flag = 1;
    cin >> n >> m;
    
    int valores[n][m];
    for (linha = 0; linha < n; linha++)
        for (coluna = 0; coluna < m; coluna++)
            cin >> valores[linha][coluna];

    for (linha = 1; linha < n - 1; linha++) {
        for (coluna = 1; coluna < m - 1; coluna++) {
            if (valores[linha][coluna] == 42 && valores[linha-1][coluna] == 7
            && valores[linha+1][coluna] == 7 && valores[linha][coluna-1] == 7 
            && valores[linha][coluna+1] == 7 && valores[linha-1][coluna-1] == 7
            && valores[linha-1][coluna+1] == 7 && valores[linha+1][coluna-1] == 7
            && valores[linha+1][coluna+1] == 7) {
                cout << linha+1 << " " << coluna+1 << endl;
                flag = 0;
                break;
            }
        }
    }
    if (flag)
        cout << "0 0" << 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