Pular para o conteúdo

Ranking unificado

objetivo Juntar duas listas já ordenadas num ranking só, sem ordenar de novo.

Duas turmas entregam as notas já ordenadas da maior pra menor. A tarefa é juntar as duas num ranking decrescente só, sem ordenar nada de novo — é a mesma ideia da intercala do merge sort, só que decrescente e com listas de tamanhos diferentes.

Dois marcadores andam: i na turma A, j na turma B. A cada volta, compara a[i] com b[j] (conta 1 ) e o maior vai pro ranking; o marcador dele anda.

No empate (nota igual), a nota da turma A vem primeiro — por isso a comparação é a[i] >= b[j]. Quando uma das listas acaba, copia o resto da outra sem comparar mais nada.

exemplo.cclique numa linha pra entender ela

Onde todo mundo escorrega

  • Usar > no lugar de >= no empate troca quem vem primeiro.
  • Esquecer de copiar o resto de quem não acabou perde elementos do ranking.

Desafio

Leia n1, as n1 notas da turma A, n2 e as n2 notas da turma B (as duas já vêm ordenadas da maior pra menor). Junte as duas num ranking decrescente, sem ordenar de novo, contando quantas comparações entre uma nota de A e uma de B foram feitas. No empate, a nota de A vem primeiro.

Saída esperada: O ranking em uma linha e, na linha seguinte, "comparacoes: X".

main.c
linha 1
#include <stdio.h>

int main() {
    int a[100], b[100], r[200];
    int n1, n2, i = 0, j = 0, k = 0, comp = 0;

    scanf("%d", &n1);
    // leia as n1 notas da turma A

    scanf("%d", &n2);
    // leia as n2 notas da turma B

    // compare enquanto as duas turmas ainda tem nota,
    // contando as comparacoes em comp

    // copie o que sobrou de cada turma, sem comparar

    // imprima o ranking numa linha, e "comparacoes: X" na linha seguinte

    return 0;
}

Ctrl+Enter (Cmd+Enter no Mac) roda. Esc sai do editor.

O que o seu scanf vai ler quando você apertar Rodar.

aperte Rodar pra ver a saída aqui

Dicas

Tenta sozinho primeiro. Travou de verdade, abre a primeira.