Pesquisar este blog

Livros Recomendados

Mostrando postagens com marcador 2059. Mostrar todas as postagens
Mostrando postagens com marcador 2059. Mostrar todas as postagens

quarta-feira, 3 de março de 2021

URI (BEECROWD) - 2059 - Ímpar, Par ou Roubo - Iniciante - C e C++

Um problema Iniciante agora! É o problema "Ímpar, Par ou Roubo"!

Plataforma: URI (BEECROWD)

Problema2059

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;
}

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