Pesquisar este blog

Livros Recomendados

segunda-feira, 15 de fevereiro de 2021

URI (BEECROWD) - 1536 - Libertadores - Ad-Hoc - C e C++

Resolvi aqui o problema Libertadores! Outro problema da categoria Ad-hoc. A solução é bem simples de entender. Conta pra mim nos comentários se a sua solução ficou muito diferente!

Plataforma: URI (BEECROWD)

Problema1536

Enunciado:

A Copa Libertadores da América é a principal competição de futebol entre clubes profissionais da América do Sul, organizada pela Confederação Sul-Americana de Futebol (CONMEBOL). Ela é conhecida por ter um regulamento muito complicado, principalmente nas fases das oitavas, quartas e semi-final.

Nessas fases são jogadas partidas de ida e volta no sistema mata-mata. Ganha quem fizer a maior pontuação no acumulado das duas partidas, sendo 3 pontos para vitória e 1 ponto em caso de empate, ambos por partida. Em caso de igualdade na pontuação, são critérios de desempate:

1) saldo de gols (número de gols a favor menos o número de gols contra).

2) mais gols marcados na casa do adversário.

3) disputa por pênaltis.

Todos os critérios devem ser aplicados considerando o acumulado das duas partidas.

Será que você consegue elaborar um algoritmo que, dados os resultados das partidas de ida e de volta, ele identifica o time vencedor?


Linguagens: C e C++


Solução:

Os dois códigos abaixo seguem a mesma lógica. Após ler os valores de cada resultado, basta calcular o total de cada time. Salvei isso nas variáveis totalTime1 e totalTime2. Basicamente precisa-se testar se o saldo de um time é maior que o outro (totalTime1 > totalTime2, por exemplo). Porém, caso os saldos sejam iguais, é necessário comparar tambem v1 (visitante 1) e m2 (mandante 2). Se m2 for maior que v1, o time 1 ganha, se for menor, o time 2 ganha. Caso contrário a disputa vai para pênaltis.

Código em C:

#include <stdio.h>

int main() {
    
    char lixo;
    int n, m1, m2, v1, v2, totalTime1, totalTime2;
    scanf("%d", &n);
    
    while (n--) {
        
        scanf("%d %c %d", &m1, &lixo, &v1);
        scanf("%d %c %d", &v2, &lixo, &m2);
        
        totalTime1 = m1 + m2;
        totalTime2 = v1 + v2;
        
        if (totalTime1 > totalTime2 || (totalTime1 == totalTime2 && m2 > v1))
            printf("Time 1\n");
        else if (totalTime1 < totalTime2 || (totalTime1 == totalTime2 && v1 > m2))
            printf("Time 2\n");
        else
            printf("Penaltis\n");
            
    }

    return 0;
}

Código em C++:

#include <iostream>

using namespace std;

int main() {
    
    char lixo;
    int n, m1, m2, v1, v2, totalTime1, totalTime2;
    cin >> n;
    
    while (n--) {
        
        cin >> m1 >> lixo >> v1;
        cin >> v2 >> lixo >> m2;
        
        totalTime1 = m1 + m2;
        totalTime2 = v1 + v2;
        
        if (totalTime1 > totalTime2 || (totalTime1 == totalTime2 && m2 > v1))
            cout << "Time 1" << endl;
        else if (totalTime1 < totalTime2 || (totalTime1 == totalTime2 && v1 > m2))
            cout << "Time 2" << endl;
        else
            cout << "Penaltis" << endl;
            
    }

    return 0;
}

Nenhum comentário:

Postar um comentário

Postagem em destaque

URI (BEECROWD) - 2158 - Helping Uncle Cláudio (Ajudando o Tio Cláudio) - Matemática - C, C++ e Haskell

Buenas! Estou aqui mais uma vez para resolver um problema de Matemática! Agora tenho resolvido alguns dessa categoria, pra que vocês possam ...

Postagens mais visitadas