Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

dark_wolk

com programa da OBI

Recommended Posts

eh o seguinte to fazendo alguns problemas da obi e comecei pelos que estao disponiveis no site la na parte do pratique no nivel 1 de programação..

 

eu jah fiz a dos bits trocados e a da armadilha...

 

so que eu parei na questao do estagiio...

 

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)

 

 

 

no primeiro teste dah beleza...

so que no segundo ele ta imprimindo as saidas separadamentes

 

(corresponde ao segundo teste)

 

Turma 2

12601

 

Turma 3

10111

 

Turma 4

212

 

onde esses codigos dos alunos deveriam sair todos na turma 2 nao separados

 

#include<iostream> 

#define MAX_ALUNOS 1000

using namespace std;

int main()
{
  int i, melhor, n,k;
  int turma = 1;

  struct aluno
  {
	int codigo, media;
  }; 
  struct aluno alunos[MAX_ALUNOS];

  cin>>n;
  while (n > 0)
	{
	  for (i = 0; i < n; i++)
		cin>>alunos[i].codigo>>alunos[i].media;

	  melhor = 0;
	  for (i = 1; i < n; i++)
	  {
		for(k = 0;k < n;k++)		
		  {
			if (alunos[i].media > alunos[k].media)
				{ 
				cout<<"Turma "<<turma++<<"\n"<<alunos[i].codigo<<"\n\n";
				i++;}

			}
	  }

	  cin>>n;
	}
}

eu sei que o erro esta qdo vai mostrar so que eu naum consigo pensar outra forma de resolver, pq para mim do jeito que ta ai eu penso que ele vai imprimir todos os valores juntos e so depois mudar....

 

 

se alguem puder me dar uma dica tah bom d+...

 

flws

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa cara ta resolvendo esses problemas eu jah consegui resolver 21 ;D!

to em 130 e pouco no rank...

sei q naum é correto + é meio f*** explicar como resolver entaum ai vai:

 

#include <stdio.h>

int main(){
	int i, indice_melhor[1000], n, j;
	int turma = 1, iAux;
	int codigo, media, melhor_media;
	while (scanf("%d", &n), n > 0){ 
		melhor_media = iAux = 0;
		j = 1;
		for (i = 0; i < n; i++) indice_melhor[i] = 0;
		for (i = 0; i < n; i++) {
			scanf("%d %d", &codigo, &media);
			if (media > melhor_media){
				melhor_media = media;
				indice_melhor[0] = codigo;
				for(int x=1;x<n;x++) indice_melhor[x] = 0;
			}
			else {
				if (media == melhor_media) indice_melhor[j++] = codigo;
			}
		}
		printf("\nTurma %d\n", turma++);
		for (int h=0;h<j;h++) if(indice_melhor[h] != 0) printf("%d ", indice_melhor[h]);   
		printf("\n");
	}	
  return 0;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.