SPOJ Problem Set (obi)
841. Estágio
Problema: ESTAGIO
|
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. Esse 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
desenvolvido pelo estagiário anterior encontra-se no final (em C, C++ e Pascal).
Como você pode verificar, o programa na forma atual tem uma imperfeição: no 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.
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.
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
Entrada:
3
1 85
2 91
3 73
5
12300 81
12601 99
15023 76
10111 99
212 99
0
Saída:
Turma 1
2
Turma 2
12601 10111 212
Restrições
0 <= N <= 1000 (N = 0 apenas para indicar o fim da entrada)
1 <= C <= 20000
0 <= M <= 100
Código em Pascal
program estagio;
const MAX_ALUNOS = 1000;
type
registro_aluno = record
codigo, media : integer;
end;
var
alunos : array[1..MAX_ALUNOS] of registro_aluno;
n, i, indice_melhor, turma : integer;
begin
readln(n); { le numero de alunos da primeira turma }
turma := 1;
while n > 0 do begin
for i := 1 to n do { le dados dos alunos }
readln(alunos[i].codigo, alunos[i].media);
indice_melhor := 1;
for i := 2 to n do { procura aluno de maior media }
if alunos[i].media > alunos[indice_melhor].media then
indice_melhor := i;
{ escreve resposta }
writeln('Turma ', turma);
turma := turma + 1;
writeln(alunos[indice_melhor].codigo);
writeln;
{ le numero de alunos da proxima turma }
readln(n);
end;
end.
Código em C
#include <stdio.h>
#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;
}
Código em C++
#include <iostream>
const int 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
cin >> n;
while (n > 0)
{
// le dados dos alunos
for (i = 0; i < n; i++)
cin >> 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
cout << "Turma " << turma++ << "\n";
cout << alunos[indice_melhor].codigo << "\n\n";
// le numero de alunos da proxima turma
cin >> n;
}
return 0;
}
| Adicionado por: | Wanderley Guimarães |
| Data: | 2006-05-05 |
| Tempo limite: | 1s
|
| Tamanho do fonte: | 50000B |
| Linguagem permitida: | Todas exceto: AWK CLOJ ERL F# GO JS PERL 6 SCALA SED TCL |
| Origem: | Olimpiada Brasileira de Informatica 2003 |