Início Inscrições Informações Gerais Regulamento Pratique Contato Mapa do Conteúdo

 Você está visitando: Início > Olimpíada Brasileira de Informática > Pratique > Modalidade Programação >
                                            > Nível 1

Estágio

Você conseguiu um estágio para trabalhar como programador na secretaria da sua escola. Como primeira tarefa, Dona Vilma, a coordenadora, solicitou que você aprimore um programa que foi desenvolvido pelo estagiário anterior. Este programa tem como entrada uma lista de nomes e de médias finais dos alunos de uma turma, e determina o aluno com a maior média na turma. Dona Vilma pretende utilizar o programa para premiar o melhor aluno de cada turma da escola. O programa feito pelo estagiário anterior se encontra adiante (programa Pascal na página x, programa C na página y, programa C++ na página x).

Como você pode verificar, o programa na forma atual tem uma imperfeição: em caso de haver alunos empatados com a melhor média na turma, ele imprime apenas o primeiro aluno que aparece na lista.

Tarefa

Dona Vilma deseja que você altere o programa para que ele produza uma lista com todos os alunos da turma que obtiveram a maior média, e não apenas um deles. Você consegue ajudá-la nesta tarefa?

Entrada

A entrada é constituída de vários conjuntos de teste, representando várias turmas. A primeira linha de um conjunto de testes contém um número inteiro N (1 ≤ N ≤ 1000) que indica o total de alunos na turma. As N linhas seguintes contêm, cada uma, um par de números inteiros C (1 ≤ C ≤ 20000) e M (0 ≤ M ≤ 100), indicando respectivamente o código e a média de um aluno. O final da entrada é indicado por uma turma com N = 0.

Exemplo de Entrada

3
1 85
2 91
3 73
5
12300 81
12601 99
98012 76
10111 99
212 99

Saída

Para cada turma da entrada seu programa deve produzir três linhas na saída. A primeira linha deve conter um identificador do conjunto de teste, no formato "Turma n", onde n é numerado a partir de 1. A segunda linha deve conter os códigos dos alunos que obtiveram a maior média da turma, separados por um espaço em branco. Os códigos dos alunos devem aparecer na mesma ordem da entrada, e cada um deve ser seguido de um espaço em branco. A terceira linha deve ser deixada em branco. O formato mostrado no exemplo de saída abaixo deve ser seguido rigorosamente.

Exemplo de Saída

Turma 1
2

Turma 2
12601 10111 212

(esta saída corresponde ao exemplo de entrada acima)

Restrições

0 ≤ N ≤ 1000 (N = 0 apenas para indicar o fim da entrada)
1 ≤ C ≤ 20000
0 ≤ M ≤ 100

Programa em Pascal

rogram estagio;

const MAX_ALUNOS = 1000;
type aluno = record
                codigo, media: integer;
              end;
var i, indice_melhor, n: integer;
    turma: integer;
    alunos: array [1..MAX_ALUNOS] of aluno;

begin
    readln(n);
    while n > 0 do begin
        (* le dados dos alunos *)
        for i := 1 to n do
            readln(alunos[i].codigo, alunos[i].media)
        (* procura aluno de maior media *)
        indice_melhor = 1;
        for i := 2 to n do
            if alunos[i].media > alunos[indice_melhor].media then
                indice_melhor = i;
        (* escreve resposta *)
        writeln(?Turma ?, turma);
        writeln(alunos[indice_melhor].codigo);
       (* le numero de alunos da proxima turma *)
        readln(n);
 end;

Programa em C

#include 

#define MAX_ALUNOS 1000

int main()
{
  int i, indice_melhor, n;
  int turma=1;
  struct 
  {
    int codigo, media;
  } alunos[MAX_ALUNOS];
  /* le numero de alunos da primeira turma */
  scanf("%d", &n;);
  while (n > 0)
    {
      /* le dados dos alunos */
      for (i = 0; i < n; i++)
        scanf("%d %d", &alunos;[i].codigo, &alunos;[i].media);
      /* procura aluno de maior media */
      indice_melhor = 0;
      for (i = 1; i < n; i++)
        if (alunos[i].media > alunos[indice_melhor].media)
            indice_melhor = i;
      /* escreve resposta */
      printf("Turma %d\n%d\n\n", turma++, alunos[indice_melhor].codigo);
      /* le numero de alunos da proxima turma */
      scanf("%d", &n;);
    }
  return 0;
}
Apoio: Unicamp Patrocínio: Fundação Carlos Chagas Promoção: SBC