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
- ocorrerá um erro na linha que contém o comando while (e < d - 1) {.
- ocorrerá uma exceção do tipo ArrayIndexOutOfBoundsException.
- o retorno do método será 4.
- ocorrerá um erro na linha que contém o comando if (v[m] < x) {.
- 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