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.
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".
#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.
Dicas
Tenta sozinho primeiro. Travou de verdade, abre a primeira.