Ir para conteúdo
Fórum Script Brasil
  • 0

Dúvida no erro de um código


Beeger

Pergunta

É o seguinte, a questão é essa: http://br.spoj.com/problems/ESTAGIO/

Apesar de quando compilado aqui no meu computador ele aparece estar funcionando corretamente, o sistema não aceita dizendo que a resposta está errada.

 

#include <iostream>
using namespace std;
int main(){
    int N,N_Melhores=0, Melhor_Aluno[N_Melhores], C, M, Melhor_Media = 0, k=0, Turma = 1;

    
    while(cin >> N, N!=0){
    N_Melhores=0;
    Melhor_Media=0;
    k=0;

        for(int i=0; i<N; i++){
            cin >> C >> M;
            if(M > Melhor_Media){
                k=0;
                N_Melhores = 1;
                Melhor_Aluno[k] = C;
                Melhor_Media = M;
                
            }
            else if(M == Melhor_Media){
                k++;
                N_Melhores++;
                Melhor_Aluno[k] = C;
            }
        }
        cout << "Turma " << Turma << endl;
        for(int i=0; i<N_Melhores; i++){
        cout << Melhor_Aluno << " ";
        }
        cout << endl << endl;
                }
}

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0
Melhor_Aluno[N_Melhores]

Não podes criar um array com "variavel" elemenos. Mas mesmo que o teu compilador te esteja a deixar, isso seria incorreto por varias razões. Uma delas é porque estás a criar isto: Melhor_Aluno[0], ou seja um array com 0 elementos? Isso vai-te crashar-te o programa quando tentares acessar...

Acho que nessa situação tu queres criar uma lista. Para isso há várias formas: Vetores (só c++), alocação e realocação de memoria:

int *data = (int*)malloc(numero de elementos * sizeof(int));

Depois mais tarde se quiseres mudar o numero de elementos da lista fazes isto:

data = (int*)realloc(data, numero de elementos  * sizeof(int));

O ponteiro "data" aponta-te para o primeiro elemento do array, por isso se quiseres obter o primeiro elemento, por exemplo, fazes isto: data[0], o segundo, data[1] e por ai fora (é semelhante a usares arrays no stack

 

aumentar o numero da lista não é por, mas para.

Por exemplo: malloc(5) -> 0 0 0 0 0

                    realloc(data, 10) -> 0 0 0 0 0   0 0 0 0 0

Repara que malloc e realloc retornam-te um ponteiro com memoria livre para usares em bytes, por isso no caso de quereres um arraz de inteiros, tens de multiplicar por sizeof(int) que te retorna, normalmente, 4 (bytes).

Não sei se estás dentro do que um pointer é, por isso sugiro-te que aprendas primeiro.

Editado por CyberGate
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...