Skip to content

Instantly share code, notes, and snippets.

@rogerioagjr
Created May 5, 2015 18:48
Show Gist options
  • Save rogerioagjr/7e6166dce78a33b86f9c to your computer and use it in GitHub Desktop.
Save rogerioagjr/7e6166dce78a33b86f9c to your computer and use it in GitHub Desktop.
#include <cstdio> // scanf e printf
#include <algorithm> // sort
#include <cstring> // strcmp
// defino os limites de n e do tamanho da string
#define MAXN 100100
#define MAXL 30
using namespace std; // algorithm
struct aluno{ // declaro a struct aluno
// e declaro seus dois membros:
char nome[30]; // o vetor de char "nome", de 30 posições
double nota; // e a double "nota"
};
int n; // declaro o inteiro n
aluno classe[MAXN]; // declaro o vetor de alunos
bool compara(aluno x, aluno y){ // declaro a bool compara, que recebe dois alunos
if(x.nota>y.nota) return true; // se a nota do primeiro for maior estão em ordem
if(y.nota>x.nota) return false; // se a nota do segundo for maior, não estão em ordem
// se o programa chegar nessa linha, então as notas são iguais, então olho para os nomes
if(strcmp(x.nome, y.nome)<0) return true; // se o nome do prieiro vier antes, estão em ordem
//se o programa chegar nessa linha, então o nome do primeiro não vem antes
return false; // então eles não estão em ordem
}
int main(){
scanf("%d", &n); // leio o valor de n
for(int i=1; i<=n; i++) scanf(" %s %lf", classe[i].nome, &classe[i].nota); // leios os nomes e notas dos alunos da classe
sort(classe+1, classe+n+1, compara); // e o ordeno o vetor classe segundo a função compara
// depois imprimo os nomes dos alunos salvos ordenadamente no vetor
for(int i=1; i<=n; i++) printf("%s\n", classe[i].nome); // para cada aluno i, imprimo o membro nome de classe[i]
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment