Solução por Rogério Júnior
Vamos salvar o ganhador de ada jogo no vetor gan e preenchê-lo jogo por jogo. Deste modo, o ganhador do jogo i será um char salvo em gan[i]. Vamos preencher os jogos separando-os por rodadas: primeiro as oitavas, depois as quartas, depois as semis e por fim a final.
Preencher as oitavas é fácil. Imagine que ao invés das letras de ‘A’ a ‘P’ tivéssemos números de 0 a 15. Note que o jogo 1 ocorreria entre os times 0 e 1, o 2 ocorreria entre o 2 e o 3, o 3 entre o 4 e o 5, ou seja, de maneira geral, o jogo i ocorre entre (i-1)*2 e (i-1)*2+1(i-1)*2. Desse modo, basta lermos os dois números que representam o placar do jogo, se o primeiro for maior, o vencedor seria (i-1)*2, caso contrário, seria (i-1)*2+1. Para convertermos novamente os times para letras, basta somarmos o caractere ‘A’. Desse modo, lidos os inteiros a e b que representam o placar, bastaria executarmos os comandos “if(a>b) gan[i]=(i-1)*2+’A’; else gan[i]=(i-1)*2+1+’A’;“.
Para preenchermos o resultados das quartas, precisaremos dos resultados dos jogos anteriores. Note que que a primeira quarta ocorre entre os vencedores das oitavas 1 e 2. A segunda, entre os das oitavas 3 e 4. Ou seja, de maneira geral, o resultado da i-ésima quarta ocorre entre os ganhadores das oitavas i*2-1 e i*2. Porém, note, que as quartas começam no jogo 9, ou seja, nas quartas, o jogo i ocorre entre os vencedores dos jogos (i-8)*2-1 e (i-8)*2.
De maneira análoga, a primeira semi ocorre entre os vencedores da primeira e da segunda oitava, e vemos que o jogo da i-ésima semi ocorre entre os vencedores das quartas i*2-1 e i*2. Entretanto, as quartas começam no jogo 9 e as semis no jogo 13, logo o resultado do jogo i será entre os vencedores dos jogos (i-12)*2+7 e (i-8)*2+8. Agora resta a final, bastando imprimir o ganhador entre os vencedores dos jogos 13 e 14. Segue o código para melhor entendimento:
https://gist.github.com/rogerioagjr/5c2b8262c5247af60b41

Deixe um comentário