FC ConcursosFC Concursos

Questão FC373301

Considere o método Java abaixo. int verifica(int x, int n, int v[]) { int e = -1, d = n; while (e < d - 1) { int m = (e + d) / 2; if (v[m] < x) { e = m; } else { d = m; } } return

Linguagens de Programação

FCC · 2018

Considere o método Java abaixo.

 

int verifica(int x, int n, int v[]) {

 

int e = -1, d = n;

 

while (e < d - 1) {

 

int m = (e + d) / 2;

 

if (v[m] < x) {

 

e = m;

 

} else {

 

d = m;

 

}

 

}

return d;

 

  }

 

O método verifica recebe os valores abaixo para x, n e v[ ].

 

x = 98

n = 6

v[ ] = {10, 23, 45, 78, 98, 125}

 

Conclui-se corretamente que

  1. ocorrerá um erro na linha que contém o comando while (e < d - 1) {.
  2. ocorrerá uma exceção do tipo ArrayIndexOutOfBoundsException.
  3. o retorno do método será 4.
  4. ocorrerá um erro na linha que contém o comando if (v[m] < x) {.
  5. o retorno do método será 1.
Mostrar resposta e comentário

Gabarito

Certo

Comentário do professor

O método retorna 4. Ele realiza uma busca binária que mantém e e d como limites exclusivos e busca o menor índice com valor ≥ x.

Inicialmente e=-1 e d=6. A cada laço calcula-se \(m=(e+d)/2\) (divisão inteira) e compara-se v[m] com x.

1ª iteração: \(m=(-1+6)/2=2\). v[2]=45 é menor que 98, então e=2.
2ª iteração: \(m=(2+6)/2=4\). v[4]=98 não é menor que 98, então d=4.

3ª iteração: \(m=(2+4)/2=3\). v[3]=78 é menor que 98, então e=3.

Agora a condição do while ( e < d-1 ) é falsa (3 < 3 → falso), o laço termina e o método retorna d=4.

Portanto o retorno 4 corresponde ao índice do primeiro elemento do vetor que é ≥ 98 (no caso, o próprio 98, em índice 4, considerando índice base 0).

Conteúdo do catálogo FC Concursos · Atualizado em

Continue aprendendo