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