1547 - Adivinha
Mais um dia, mais um problema Ad Hoc...
Descrição
Solução
Para resolver este problema, basta simular o processo, lendo cada palpite de cada aluno e verificando se tal palpite é mais próximo do número real que os demais alunos. É importante notar que quando um aluno consegue acertar o número, mesmo assim é necessário ler os palpites dos alunos posteriores para não bagunçar a entrada do programa.
Quando não sabemos que limite colocarmos a princípio, uma boa ideia é assumir que o primeiro aluno tem o melhor palpite e ver se os outros alunos provam o contrário. Outra alternativa é tentar procurar no enunciado qual a maior diferença possível entre os dois números passados, o que neste caso, sabemos que é 100
, pois todos os palpites (e o número desejado) estão no intervalo [1, 100]
. Com isso, um bom limite inicial seria 101
.
#include <stdlib.h>
#include <stdio.h>
int main(){
int N, QT, S, palpite, menor_diferenca, melhor_palpite;
scanf("%d", &N);
for(int i = 0; i < N; ++i){
scanf("%d %d", &QT, &S);
scanf("%d", &palpite);
melhor_palpite = 0;
menor_diferenca = abs(S - palpite);
for(int j = 1; j < QT; ++j){
scanf("%d", &palpite);
if(menor_diferenca > abs(S - palpite)){
melhor_palpite = j;
menor_diferenca = abs(S - palpite);
}
}
printf("%d\n", melhor_palpite + 1);
}
return 0;
}
Last updated
Was this helpful?