O Despertar da Força foi resolvido e postado aqui. Espero que aproveitem!
Plataforma: URI (BEECROWD)
Problema: 2163
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; }
#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; }