Beeger Postado Setembro 2, 2016 Denunciar Share Postado Setembro 2, 2016 É 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; } } Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 CyberGate Postado Setembro 2, 2016 Denunciar Share Postado Setembro 2, 2016 (editado) 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 Setembro 2, 2016 por CyberGate Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Beeger
É 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
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.