Novo problema Ad-hoc! O título desse é "Adivinha". Confere abaixo as soluções para este exercício.
Plataforma: URI (BEECROWD)
Problema: 1547
Enunciado:
O professor Genesio recebeu várias camisetas da OBI (Organização dos Bacharéis Intelectuais) para doar a seus alunos de Ciência da Computação. Para fazer a distribuição destas camisetas ele organizou os alunos de cada turma do curso em pequenos grupos (de no máximo 10 pessoas) e definiu que faria o sorteio de uma camiseta para cada um dos grupos. Como Genesio não quer perder muito tempo com este sorteio, ele pediu que você o ajudasse com um programa que determinasse quem foi o aluno ganhador de acordo com a seguinte regra: O primeiro de cada grupo a acertar um número escolhido pelo professor obviamente ganha a camiseta, mas se ninguém acertar este número, ganha a camiseta o primeiro que chegar o mais próximo deste número.
Não faz diferença quem do grupo o professor escolhe para tentar iniciar a adivinhação. Este sempre será o aluno número 1, e assim sucessivamente.
Linguagens: C e C++
Solução:
Código em C:
Basta testar se o valor lido nas iterações é igual ao valor informado junto com a quantidade. Se for, acrescenta a posição dele. Utilizei para controle também uma variável menor, assim quando isso acontecer uma vez ele não entra de novo na estrutura condicional if. Se eles não forem iguais, é necessário pegar a diferença absoluta entre os valores v e s. Eu criei minha própria função abs. Aliás, fica a sugestão para criá-la utilizando operador ternário!
#include <stdio.h> int abs(int a) { if (a < 0) return -a; return a; } int main() { int n, qt, s, i, v, menor, pos, dif; scanf("%d", &n); while (n--) { scanf("%d %d", &qt, &s); for (i = 0, menor = 100; i < qt; i++) { scanf("%d", &v); if (v == s && menor) { pos = i + 1; menor = 0; } else { dif = abs(v-s); if (dif < menor) { menor = dif; pos = i + 1; } } } printf("%d\n", pos); } return 0; }
Código em C++:
Só pra não deixar totalmente igual, não usei a variável dif e aproveitei a função abs já definida em cmath aqui.
#include <iostream> #include <cmath> using namespace std; int main() { int n, qt, s, i, v, menor, pos; cin >> n; while (n--) { cin >> qt >> s; for (i = 0, menor = 100; i < qt; i++) { cin >> v; if (v == s && menor) { pos = i + 1; menor = 0; } else if (abs(v-s) < menor) { menor = abs(v-s); pos = i + 1; } } cout << pos << endl; } return 0; }