Algorithm
Problem Name: beecrowd | 3053
Problem Link: https://www.beecrowd.com.br/judge/en/problems/view/3053
Jogo Dos Copos
Por Brazil
Timelimit: 1
Uma brincadeira muito comum e divertida entre dois jogadores usa uma moeda e três copos opacos (ou seja, não é possível ver o que está dentro do copo olhando pela lateral do copo). Os três copos são colocados com a boca para baixo, em uma linha, um ao lado do outro, em posições que vamos chamar de A, B e C. Uma moeda é colocada embaixo de um dos copos. Na brincadeira, um jogador chamado banca realiza um movimento para trocar a posição de dois copos, arrastando os copos de tal modo que se a moeda está em baixo de um dos copos envolvidos no movimento, ela continua embaixo do mesmo copo após a troca de posição. O jogador banca pode realizar três tipos de movimento, ilustrados na figura abaixo:
1. Trocar o copo na posição A com o copo na posição B.
2. Trocar o copo na posição B com o copo na posição C.
3. Trocar o copo na posição A com o copo na posição C.
O jogador banca realiza vários movimentos de troca tentando confundir o outro jogador, chamado espectador. Ao final o jogador espectador deve dizer em qual posição está a moeda. Por exemplo, considere que inicialmente a moeda está embaixo do copo na posição A e que o jogador banca realiza uma sequência de apenas três trocas, executando um movimento do tipo 1, após o qual moeda termina embaixo do copo na posição B, seguido de um movimento do tipo 2, após o qual a moeda termina embaixo do copo na posição C, seguido de um movimento do tipo 3, após o qual a moeda termina embaixo do copo na posição A.
Nesta tarefa, dadas a descrição da sequência de movimentos e a posição inicial da moeda, você deve escrever um programa que determine a posição final da moeda após todos os movimentos.
Entrada
A primeira linha contém um inteiro N, o número de movimentos que o jogador banca realiza. A segunda linha contém um caractere, entre A, B e C, indicando a posição inicial da moeda. Cada uma das N linhas seguintes contém um inteiro, indicando o tipo de movimento efetuado pelo jogador banca na sequência.
Saída
Seu programa deve produzir uma única linha, com um único caractere entre A, B e C, a posição em que a moeda se encontra ao final da sequência de movimentos.
Restrições • 1 ≤ N ≤ 1000
Exemplos de Entrada | Exemplos de Saída |
3 A 1 2 3 |
A |
6 C 1 2 3 3 1 1 |
B |
Code Examples
#1 Code Example with C Programming
Code -
C Programming
#include <stdio.h>
void swap(int* copos, pos1, pos2){
int aux;
aux = copos[pos1];
copos[pos1] = copos[pos2];
copos[pos2] = aux;
}
int main(){
int n, mov, copos[3] = {0, 0, 0};
char inicio;
scanf("%d %c", &n, &inicio);
//O 1 indicará onde a moeda encontra-se. Se o inicio escolhido for A, subtrai A por 65 do código ASCII de 'A'.
//E teremos então o número 0, índice do primeiro elemento do vetor.
copos[inicio - 65] = 1;
while(n > 0){
scanf("%d", &mov);
switch(mov){
case 1:
//Caso um destes copos tenha a moeda. Troca a moeda de um copo para outro. Senão, nada mudará.
//O comportamento é o mesmo para todos os movimentos. Swap troca o que está em copos[0] pelo que está em copos[1] e vice-versa.
if(copos[0] || copos[1] == 1)
swap(copos, 0, 1);
break;
case 2:
if(copos[1] || copos[2] == 1)
swap(copos, 1, 2);
break;
case 3:
if(copos[0] || copos[2] == 1)
swap(copos, 0, 2);
break;
}
n--;
}
if(copos[0] == 1)
printf("A\n");
else
if(copos[1] == 1)
printf("B\n");
else
printf("C\n");
return 0;
}
Copy The Code &
Try With Live Editor
Input
Output
#2 Code Example with C++ Programming
Code -
C++ Programming
#include <iostream>
#include <algorithm>
using namespace std;
int main(){
int n, mov, copos[3] = {0, 0, 0};
char inicio;
cin >> n;
cin >> inicio;
//O 1 indicará onde a moeda encontra-se. Se o inicio escolhido for A, subtrai A por 65 do código ASCII de 'A'.
//E teremos então o número 0, índice do primeiro elemento do vetor.
copos[inicio - 65] = 1;
while(n > 0){
cin >> mov;
switch(mov){
case 1:
//Caso um destes copos tenha a moeda. Troca a moeda de um copo para outro. Senão, nada mudará.
//O comportamento é o mesmo para todos os movimentos. Swap troca o que está em copos[0] pelo que está em copos[1] e vice-versa.
if(copos[0] || copos[1] == 1)
swap(copos[0], copos[1]);
break;
case 2:
if(copos[1] || copos[2] == 1)
swap(copos[1], copos[2]);
break;
case 3:
if(copos[0] || copos[2] == 1)
swap(copos[0], copos[2]);
break;
}
n--;
}
if(copos[0] == 1)
cout << "A" << endl;
else
if(copos[1] == 1)
cout << "B" << endl;
else
cout << "C" << endl;
return 0;
}
Copy The Code &
Try With Live Editor
Input
Output