TOPIC

Oq tem de errado?

01001010 01110010 01100100 01110011 asked 4 years ago

#include <stdio.h>

int main()
{
    int n;
    scanf("%d", &n);
    int vet[n];
    int cont_par = 0, cont_impar = 0;
    int i;
    for(i = 0; i < n; i++)
    {
        scanf("%d", &vet[i]);
        if(vet[i] % 2 == 0)
        {
            cont_par++;
        }
        else
        {
            cont_impar++;
        }
    }
    int vet_aux[n];
    int impar = cont_par;
    int par = 0;
    for(i = 0; i < n; i++)
    {
        if (vet[i] % 2 != 0)
        {
            vet_aux[impar] = vet[i];
            impar++;
        }
        else
        {
            vet_aux[par] = vet[i];
            par++;
        }
    }
    int j;
    if (cont_par != 0)
    {
        for (i = 0; i < cont_par; i++)
        {
            for (j = i + 1; j < cont_par; j++)
            {
                if(vet_aux[i] > vet_aux[j])
                {
                    int valor_aux = vet_aux[i];
                    vet_aux[i] = vet_aux[j];
                    vet_aux[j] = valor_aux;
                }
            }
        }
    }
    if(cont_impar != 0)
    {
        for (i = cont_par; i < n; i++)
        {
            for (j = i + 1; j < n; j++)
            {
                if(vet_aux[i] < vet_aux[j])
                {
                    int valor_aux = vet_aux[i];
                    vet_aux[i] = vet_aux[j];
                    vet_aux[j] = valor_aux;
                }
            }
        }
    }
    for (i = 0; i < n; i++)
    {
        printf("%d\n", vet_aux[i]);
    }
    return 0;
}

Remember not post solutions. Your post may be reviewed by our moderators.

  • Raul Dario Cabrera Tapia replied 4 years ago

    Cara. Você pode colocar seu texto em formato de código? Basta você fazer Ctrl+Alt+C (tem também o botão com o símbolo < / > na aba de edição) antes de escrever o código, isso iria ajudar bastante :)

  • Leandro Pereira replied 11 months ago

    Olá amigo. O problema é a magnitude dos inteiros que você está usando. Não importa o método de ordenação (pois o problema não menciana nada sobre isso), mas sim que você pode ter até 100k entradas POSITIVAS. Utilize unsigned long, tanto para o primeiro numero que define a quantidade de entradas, quanto para as demais, bem como índices e etc. Resolvel pra mim.

  • Raul Dario Cabrera Tapia replied 4 years ago

    Eu gostei bastante da lógica de ordenação, mas, pelo que vejo, é uma solução muito lenta para o problema. A complexidade do código é da ordem de n^2, mas o problema exige uma solução n*log(n) (pois n pode chegar a 10^5).

    Você pode procurar algoritmos de ordenação como mergesort (recomendo este), heapsort e quicksort (embora este também possa a chegar na ordem de n^2).