Skip to content

Instantly share code, notes, and snippets.

@anitainfo
Created October 15, 2020 12:52
Show Gist options
  • Save anitainfo/c79994c2bb8ef9c3374aee9ebf2c4df0 to your computer and use it in GitHub Desktop.
Save anitainfo/c79994c2bb8ef9c3374aee9ebf2c4df0 to your computer and use it in GitHub Desktop.
#include<bits/stdc++.h> //biblioteca utilizada
using namespace std;
int contador[13]; //declaro o vetor contador
struct comp{ //declaro uma struct de um char e um int
char nome[16];
int pont;
};
bool cmp(comp a, comp b) //bool para comparar
{
if(a.pont!=b.pont)return a.pont>b.pont; //se os valores de pontuação forem diferentes, retorna 'a.pont>b.pont'
else //se não
{
int val=strcmp(a.nome,b.nome); //'val' recebe o resultado da comparação alfabética entre nome 'a' e nome 'b'
if(val<0)return a.nome<b.nome; //se 'val' menor que 0, retorna 'a.nome<b.nome'
else return a.nome>b.nome; //se não, retorna 'a.nome>b.nome'
}
}
int main() {
int n, teste=1; //declaro as variáveis
while(scanf("%d", &n)==1 && n > 0) //enquanto existem casos de teste ('n'>0)
{
comp v[n+1]; //declaro um vetor na forma de struct
for(int i=0; i<n; i++) //loop enquanto 'i'<'n'
{
scanf("%s[^\n]", v[i].nome); //leitura do nome
v[i].pont=0; //zero a pontuacao do vetor na posição 'i'
int maxi=0; //zero a variável 'maxi'
int mini=1010; //maximizo o valor de 'mini'
for(int j=0; j<12; j++) //loop para ler todas as pontuações
{
scanf("%d", &contador[j]); //leitura de cada pontuação
v[i].pont+=contador[j]; //soma-se o valor lido à pontuação da pessoa
maxi=max(maxi,contador[j]); //maxi recebe o máximo entre seu valor antigo e o valor lido
mini=min(mini,contador[j]); //mini recebe o mínimo entre seu valor antigo e o valor lido
}
v[i].pont-=maxi; //subtrai-se o valor máximo lido da pontuação total
v[i].pont-=mini; //subtrai-se o valor mínimo lido da pontuação total
}
sort(v,v+n,cmp); //ordena-se o vetor 'v[]', de acordo com a função 'cmp'
sort(v,v+n,cmp); //ordena-se o vetor 'v[]' novamente, de acordo com a função 'cmp'
printf("Teste %d\n", teste++); //imprimo o teste determinado
int posi=1; //variável 'posi' é declarada, inicialmente valendo 1
for(int i=0; i<n; i++) //enquanto 'i'<'n'
{
if(i>0) //se 'i'>0
{
if(v[i].pont!=v[i-1].pont)posi=i+1; //se a pontuacao anterior é deiferente da atual, soma-se 1 à 'posi'
}
printf("%d %d %s\n", posi, v[i].pont, v[i].nome); //imprime a posição ('posi), a pontução total e o nome
}
printf("\n"); //imprime uma linha em branco
}
return 0; //retorna a 0
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment