Jogo do Operador é o problema solucionado nesse post! Vejam!
Plataforma: URI (BEECROWD)
Problema: 2493
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; }
#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