Um problema Iniciante agora! É o problema "Ímpar, Par ou Roubo"!
Plataforma: URI (BEECROWD)
Problema: 2059
Enunciado:
Um novo jogo chamado Ímpar, Par ou Roubo (IPR) está se tornando muito popular. Esse jogo surgiu quando alguns amigos estavam sem conexão com a internet, sem celular, sem computador e bastante desocupados. O jogo está tão popular que irá acontecer um campeonato mundial de IPR e cada país do mundo irá escolher um representante para competir.
O jogo funciona da seguinte forma: dois jogadores participam, o jogador 1 escolhe entre par ou ímpar, então cada jogador escolhe um inteiro positivo, se a soma desses números for par e o jogador 1 tiver escolhido par então o jogador 1 ganha, se a soma for ímpar o jogador 2 ganha. Caso o jogador 1 tivesse escolhido ímpar ele ganharia se a soma fosse ímpar, caso a soma fosse par o jogador 2 ganharia. Nada de diferente de um jogo de par ou ímpar convencional, correto?
A diferença do jogo é que o jogador 1 pode roubar e assim assegurar sua vitória independentemente do resultado do jogo de ímpar ou par convencional, já o jogador 2 pode ou não acusar o jogador 1 de roubo. Com essas adições no jogo se o jogador 1 roubar e o jogador 2 acusar o roubo então o jogador 2 ganha, caso o jogador 2 não acuse o roubo e o jogador 1 roubar então o jogador 1 ganha, caso o jogador 2 acuse o roubo, mas o jogador 1 não tiver roubado então o jogador 1 ganha, se o jogador 1 não roubar e o jogador 2 não acusar o roubo o jogo segue como descrito anteriormente.
Você foi contratado pela OIIPR (Organização Internacional de Ímpar, Par ou Roubo) para desenvolver um programa que dada a escolha do jogador 1 entre par ou ímpar, os números escolhidos como jogada e as ações dos jogadores (roubo/acusação) mostre quem foi o vencedor.
Linguagem: C++
Solução:
Fiz os testes um pouco diferentes em C e C++, mas chego no aceite em ambos os casos.
Código em C:
Basta verificar todas as condições para que o jogador 2 ganhe. Caso uma das condições seja satisfeita, a variável vencedor recebe o valor 2. Inicializo ela com o valor 1, então ela sempre terá a resposta certa após passar pelo if.
#include <stdio.h> int main() { int p, j1, j2, r, a, vencedor = 1; scanf("%i %i %i %i %i", &p, &j1, &j2, &r, &a); if ((r == 1 && a == 1) || r == a && ((p == 1 && (j1 + j2) % 2 == 1) || (p == 0 && (j1 + j2) % 2 == 0))) vencedor = 2; printf("Jogador %i ganha!\n", vencedor); return 0; }
Código em C++:
Aqui também fiz o mesmo teste, mas atribuí valor diferente à variável vencedor. Testo se esta variável é diferente de zero, caso em que o Jogador 2 ganha. Senão, jogador 1 ganha. Eu particularmente prefiro a forma que resolvi em C, e você?
#include <iostream> using namespace std; int main() { int p, j1, j2, r, a, vencedor = 0; cin >> p >> j1 >> j2 >> r >> a; if ((r == 1 && a == 1) || r == a && ((p == 1 && (j1 + j2) % 2 == 1) || (p == 0 && (j1 + j2) % 2 == 0))) vencedor = 1; if (vencedor) cout << "Jogador 2 ganha!" << endl; else cout << "Jogador 1 ganha!" << endl; return 0; }
Nenhum comentário:
Postar um comentário