1873 - Pedra-papel-tesoura-lagarto-Spock

Vamos fazer um simulador desse jogo bizarro!

Descrição

Solução

Segue uma esquematização que pode te ajudar a resolver esse problema:

Jogada

Ganha para

Perde para

Pedra

  • Tesoura

  • Lagarto

  • Papel

  • Spock

Papel

  • Pedra

  • Spock

  • Tesoura

  • Lagarto

Tesoura

  • Papel

  • Lagarto

  • Pedra

  • Spock

Lagarto

  • Papel

  • Spock

  • Pedra

  • Tesoura

Spock

  • Pedra

  • Tesoura

  • Papel

  • Lagarto

Alternativa 1 - Sequência de ifs

#include <string.h>
#include <stdio.h>

int main(){
    int C;
    char rajesh[11], sheldon[11];

    scanf("%d\n", &C);

    for(int i = 0; i < C; ++i){
        scanf("%s %s\n", &rajesh, &sheldon);

        if(!strcmp(rajesh, sheldon)){
            printf("empate\n");
        }else if(!strcmp(rajesh, "pedra")){
            if(!strcmp(sheldon, "tesoura") || !strcmp(sheldon, "lagarto"))
                printf("rajesh\n");
            else
                printf("sheldon\n");
        }else if(!strcmp(rajesh, "papel")){
            if(!strcmp(sheldon, "pedra") || !strcmp(sheldon, "spock"))
                printf("rajesh\n");
            else
                printf("sheldon\n");
        }else if(!strcmp(rajesh, "tesoura")){
            if(!strcmp(sheldon, "papel") || !strcmp(sheldon, "lagarto"))
                printf("rajesh\n");
            else
                printf("sheldon\n");
        }else if(!strcmp(rajesh, "lagarto")){
            if(!strcmp(sheldon, "papel") || !strcmp(sheldon, "spock"))
                printf("rajesh\n");
            else
                printf("sheldon\n");
        }else if(!strcmp(sheldon, "pedra") || !strcmp(sheldon, "tesoura"))
            printf("rajesh\n");
        else
            printf("sheldon\n");
        }
    }

    return 0;
}

Alternativa 2 - Utilização de uma matriz (ou dicionário) de regras

Você pode converter cada jogada em um inteiro e se referir a uma matriz de resultados para saber qual dos jogadores ganhou aquela partida ou então utilizar um dicionário para o mesmo fim.

#include <string.h>
#include <stdio.h>

char* jogadas[5] = {"pedra", "papel", "tesoura", "lagarto", "spock"};
int regras[5][5] = {
    {0, -1, 1, 1, -1},
    {1, 0, -1, -1, 1},
    {-1, 1, 0, 1, -1},
    {-1, 1, -1, 0, 1},
    {1, -1, 1, -1, 0}
};

int converte(char* jogada){
    for(int i = 0; i < 5; ++i){
        if(!strcmp(jogada, jogadas[i])) return i;
    }
}

int main(){
    int C, r, s;
    char rajesh[11], sheldon[11];

    scanf("%d\n", &C);

    for(int i = 0; i < C; ++i){
        scanf("%s %s\n", rajesh, sheldon);

        r = converte(rajesh);
        s = converte(sheldon);

        switch(regras[r][s]){
            case -1:    printf("sheldon\n");
                        break;
            case 0:     printf("empate\n");
                        break;
            case 1:     printf("rajesh\n");
                        break;
        }
    }

    return 0;
}

Last updated