Submeter | Todas submissőes | Melhores | Voltar |
ESTAGIO - 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. 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
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 |
Memory limit: | 1536MB |
Cluster: | Cube (Intel G860) |
Linguagem permitida: | Todas exceto: ASM64 CLOJURE ERL FSHARP JS-RHINO NODEJS PERL6 PY_NBC SCALA TCL VB.NET |
Origem: | Olimpiada Brasileira de Informatica 2003 |
hide comments
|
|||||
2012-09-01 03:19:46 LOL
Alguem tem mais casos de teste? năo encontro o erro no meu programa... |
|||||
2012-06-03 15:18:45 Matheus Henrique
todos os casos de testes que faço, obtenho a saída esperada, mas quando submeto dá "resposta errada". |
|||||
2012-05-15 20:25:27 Rafael dos Anjos Menezes
fiz de duas formas diferentes, ambas funcionam perfeitamente nos testes que eu fiz (que nao foram poucos), mas continua dando "resposta errada" D: |
|||||
2012-02-18 14:24:14 Denis Carvalho Silva
meu código nao foi aceito em c... mas sim em c++. Alguem sabe porque? |
|||||
2010-08-16 00:11:46 thiagojobson [UERN]
Quem tá acostumado em colocar "Teste n" preste atençăo que o problema pede "Turma n". |
|||||
2009-09-27 16:39:49 Guilherme Souza
no codigo em c++ falta o using namespace std; |