Solução por Anita Ramos
Este problema apresenta mais de uma solução, mas optei por explicar a que me pareceu mais simples por não exigir tanta manipulação com ou e sim mais com , por mais que possa não ser a primeira ideia que surge para resolvê-lo.
A ideia consiste em cada palavra (pedra, papel, tesoura....) ter um número específico identificando-a. Esse número se baseia na primeira e na última letra de cada uma, já que não temos nenhuma palavra com essas duas letras iguais. Na verdade você poderia pegar qualquer par de letras (necessariamente 2 ou mais por conta das palavras "pedra" e "papel"), mas optei por essas. Para acessá-las, basta "chamar" o vetorchar[0] e o vetorchar[tamanho da palavra-1] (-1 já que começa com 0). Apenas lembrando que para saber o tamanho de um vetor de char temos a função . Depois apenas comparamos os números de identificação nesses 3 casos:
- Se eles forem iguais, as palavras são iguais, ou seja, empate;
- Se o lado esquerdo ganhar do direito, imprimi-se "Bazinga!"
- Se o lado direito ganhar (nenhum dos casos anteriores), imprimi-se "Raj trapaceou!"
Para determinar se o lado esquerdo ganha, apenas uso um que checa se algum caso do lado esquerdo ganhar é verdade, sendo que cada palavra ganha de exatamente outras duas palavras. Exemplo: papel ganha da pedra e do Spock, ou seja, ganha de 2. Assim, eu apenas verifico todos os casos possíveis para cada palavra, totalizando 5 palavras -> 2 testes para cada = 10 opções possíveis.
Segue o código comentado para melhor compreensão da solução:
OBS: não se assuste com o seu tamanho, ele contém muitos comentários, mas o código em si é curto.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include<bits/stdc++.h> //biblioteca utilizada | |
using namespace std; | |
int main() | |
{ | |
int n,tam,a,b; //declaração das variáveis | |
char pal[2100], pal2[2100]; //vetor de char para ler as duas palavras de uma linha | |
scanf("%d", &n); //leitura do 'n' | |
for(int i=1; i<=n; i++) //loop para rodar todos os casos de teste | |
{ | |
scanf(" %s %s", pal, pal2); //leitura das duas palavras | |
tam=strlen(pal); //'tam' recebe o tamanho da 1º palavra | |
a=pal[0]+pal[tam-1]; //'a' recebe a soma do valor da 1º letra e a última letra da 1º palavra baseado na tabela ASCII | |
tam=strlen(pal2); //'tam' recebe o tamanho da 2º palavra | |
b=pal2[0]+pal2[tam-1]; //'b' recebe a soma do valor da 1º letra e a última letra da 2º palavra baseado na tabela ASCII | |
printf("Caso #%d: ", i); //imprime a primeira linha da saída | |
if(a==b)printf("De novo!\n"); //se 'a' = 'b', as palavras são iguais, ou seja, empate (imprime "De novo!") | |
//se não for empate e o lado esquerdo ganha do direito (todos os casos possíveis), imprime "Bazinga!" | |
else if((a==220 && (b==209 || b==190)) || (a==219 && (b==220 || b==190)) || (a==213 && (b==220 || b==219)) || (a==209 && (b==219 || b==213)) || (a==190 && (b==209 || b==213)))printf("Bazinga!\n"); | |
//se não for empate e o lado esquerdo não ganha (ou seja, lado direito ganha), imprime "Raj trapaceou!" | |
else printf("Raj trapaceou!\n"); | |
} | |
return 0; //retorna a 0 | |
} | |
/* Valores da soma da 1º e da última letra de cada palavra | |
papel 220 | |
lagarto 219 | |
tesoura 213 | |
pedra 209 | |
Spock 190*/ |