Pesquisar este blog

Livros Recomendados

domingo, 14 de março de 2021

URI (BEECROWD) - 2493 - Jogo do Operador - Iniciante - C e C++

Jogo do Operador é o problema solucionado nesse post! Vejam!

Plataforma: URI (BEECROWD)

Problema2493

Enunciado:

Samu Elmito adora criar jogos peculiares para desafiar seus amigos. Desta vez, ele inventou um jogo chamado "Jogo do Operador", em que ele cria expressões básicas e cada jogador deve escolher uma expressão e preencher a lacuna com o operador correto para validá-la. Os jogadores poderão escolher operadores de somente três tipos: adição, subtração e multiplicação. Porém, se o jogador achar que não há operador entre os três tipos que valide a expressão, poderá responder Impossível.

Sua tarefa é simples: dadas as expressões e as respostas dos jogadores, determinar os jogadores que não passarão para a outra fase do jogo.


Linguagens: C e C++


Solução:

As respostas em C e C++ são iguais em termos de raciocínio aplicado, mas com estruturas diferentes.

Código em C:

#define TAM 50
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int compara(const void *p1, const void *p2) {
    return strcmp(p1, p2);
}
int main() {
    int t, i, p, j, hits, x[TAM], y[TAM], z[TAM];
    char s, nome[55][55], str[55];
    while (scanf("%d", &t) != EOF) {
        for (i = 0; i < t; i++)
            scanf("%i %i=%i ", &x[i], &y[i], &z[i]);
        for (i = 0, j = 0, hits = 0; i < t; i++) {
            scanf("%s %d %c ", str, &p, &s);
            p--;
            if (s == '+' && x[p] + y[p] == z[p])
                hits++;
            else if (s == '-' && x[p] - y[p] == z[p])
                hits++;
            else if (s == '*' && x[p] * y[p] == z[p])
                hits++;
            else if (s == 'I' && x[p] + y[p] != z[p] && x[p] - y[p] != z[p]  && x[p] * y[p] != z[p])
                hits++;
            else
                strcpy(nome[j++], str);
        }
        if (hits == t)
            printf("You Shall All Pass!");
        else if (!hits)
            printf("None Shall Pass!");
        else {
            qsort(nome, j, 55, compara);
            printf("%s", nome[0]);
            for (i = 1; i < j; i++)
                printf(" %s", nome[i]);
        }
        printf("\n");
        memset(x, 0, TAM);
        memset(y, 0, TAM);
        memset(z, 0, TAM);
        memset(nome, 0, TAM);
    }
    return 0;
}

Código em C++:

#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;
int main() {
    int t, i, a, b, c, p, hits;
    char lixo, s;
    string str;    
    vector<int> x, y, z;
    vector<string> nome;
    while (cin >> t) {
        for (i = 0; i < t; i++) {
            cin >> a >> b >> lixo >> c;
            x.push_back(a);
            y.push_back(b);
            z.push_back(c);
        }
        for (i = 0, hits = 0; i < t; i++) {
            cin.ignore();
            cin >> str >> p >> s;
            p--;
            if (s == '+' && x.at(p) + y.at(p) == z.at(p))
                hits++;
            else if (s == '-' && x.at(p) - y.at(p) == z.at(p))
                hits++;
            else if (s == '*' && x.at(p) * y.at(p) == z.at(p))
                hits++;
            else if (s == 'I' && x.at(p) + y.at(p) != z.at(p) && x.at(p) - y.at(p) != z.at(p)  && x.at(p) * y.at(p) != z.at(p))
                hits++;
            else
                nome.push_back(str);
        }
        if (hits == t)
            cout << "You Shall All Pass!";
        else if (!hits)
            cout << "None Shall Pass!";
        else {
            sort(nome.begin(), nome.end());
            cout << nome.at(0);
            for (i = 1; i < nome.size(); i++)
                cout << " " << nome.at(i);
        }
        cout << endl;
        x.clear();
        y.clear();
        z.clear();
        nome.clear();
    }
    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