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;
}
|