Ajuda com um desafio de lógica.

28/08/2019

0

Então, estou com uma duvida sobre esse desafio, apesar de ter criado uma solução (uma gambiarra) gostaria de uma solução por meio de matrizes.

Um pessoa está parado na célula do topo, à esquerda (1, 1) de um grid N x M (N linhas e M colunas), inicialmente olhando para a célula à sua direita. Ele se movimenta pelo grid da seguinte maneira:
-Se a célula à sua frente faz parte do grid e ainda não foi visitada, ele dá um passo à frente e vira para sua direita.
-Se não, ele vira para sua direita, e tenta o passo 1 novamente.
-Se ele não consegue mais virar à direita (já tentou o passo 2 quatro vezes), ele para de andar.

Ele anda pelo grid e visita quantas células ele conseguir. Seu objetivo é descobrir quantas células ele visitou antes de parar.

Aqui está um exemplo do movimento de Marcos em um grid 9x9. O número em cada célula determina a sequência que ele passou por ela:
1 2 55 54 51 50 47 46 45
4 3 56 53 52 49 48 43 44
5 6 57 58 79 78 77 42 41
8 7 60 59 80 75 76 39 40
9 10 61 62 81 74 73 38 37
12 11 64 63 68 69 72 35 36
13 14 65 66 67 70 71 34 33
16 15 20 21 24 25 28 29 32
17 18 19 22 23 26 27 30 31

INPUT
A entrada é dois inteiros, N e M em linhas distintas.

OUTPUT
Imprima um único número inteiro que representa o número de células visitadas no grid informado.

Constantes
N e M são valores inteiros entre 1 e 100.

EXEMPLO 1
Entrada
3
3
Saída
9
Explicação
As células são visitadas na sequência indicada pelos números abaixo:
1 2 9
4 3 8
5 6 7
EXEMPLO 2
Entrada
7
4
Saída
18
Explicação
As células são visitadas na sequência indicada pelos números abaixo (as indicadas por 0 nunca foram visitadas):
1 2 0 0
4 3 0 0
5 6 0 0
8 7 0 0
9 10 0 0
12 11 16 17
13 14 15 18

--------------------------
Eu tentei resolver da seguinte maneira:


public class Atividade{
public static void main(String[] args){
Scanner in = new Scanner(System.in);

System.out.println("Digite um número de Linhas");
int linhas = in.nextInt();
System.out.println("Digite um número de Colunas");
int colunas = in.nextInt();

if(colunas == 1){
System.out.println(linhas);
}

else {
if( linhas % 2 == 0 ){
System.out.println( linhas * 2 );
}

else{
if( colunas % 2 == 0 ){
System.out.println( linhas * 2 + ( ( colunas - 2 ) *2 ) );
}
else {
System.out.println( colunas * linhas );
}
}
}
}
}

------------------
Gostaria saber como eu resolveria o problema por meio de matrizes.
Pedro Jose

Pedro Jose

Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar