Exercício "Esquerda, Volver!" resolvido! Esse exercício é da categoria ad-hoc, mas poderia muito bem ser da iniciante pois a solução não é muito complexa. Basicamente exige a criação de condições utilizando o operador % (resto da divisão inteira). Confiram nesse post!
Plataforma: URI (BEECROWD)
Problema: 1437
Enunciado:
Este ano o sargento está tendo mais trabalho do que de costume para treinar os recrutas. Um deles é muito atrapalhado, e de vez em quando faz tudo errado – por exemplo, ao invés de virar à direita quando comandado, vira à esquerda, causando grande confusão no batalhão. O sargento tem fama de durão e não vai deixar o recruta em paz enquanto este não aprender a executar corretamente os comandos. No sábado à tarde, enquanto todos os outros recrutas estão de folga, ele obrigou o recruta a fazer um treinamento extra. Com o recruta marchando parado no mesmo lugar, o sargento emitiu uma série de comandos "Esquerda, Volver!" e "Direita, Volver!". A cada comando, o recruta deve girar sobre o mesmo ponto e dar um quarto de volta na direção correspondente ao comando. Por exemplo, se o recruta está inicialmente com o rosto voltado para a direção norte, após um comando de "esquerda volver!" ele deve ficar com o rosto voltado para a direção oeste. Se o recruta está inicialmente com o rosto voltado para o leste, após um comando "Direita, volver!" ele deve ter o rosto voltado para o sul. No entanto, durante o treinamento, em que o recruta tinha inicialmente o rosto voltado para o norte, o sargento emitiu uma série tão extensa de comandos, e tão rapidamente, que até ele ficou confuso, e não sabe mais para qual direção o recruta deve ter seu rosto voltado após executar todos os comandos. Você pode ajudar o sargento?
Linguagens: C e C++
Solução:
Basta verificar se o comando é "E" e incrementar a posição, se não for é necessário decrementar. Depois disso basta verificar o resto para cada condição. É importante ressaltar que é necessário verificar se o resto é negativo.
Código em C:
#include <stdio.h> int main() { int n, pos; char comando; while (1) { scanf("%d ", &n); if (n == 0) break; pos = 0; while (n--) { scanf("%c", &comando); if (comando == 'E') pos++; else pos--; } if (pos % 4 == 0) printf("N\n"); else if (pos % 4 == 1 || pos % 4 == -3) printf("O\n"); else if (pos % 4 == 3 || pos % 4 == -1) printf("L\n"); else printf("S\n"); } return 0; }
#include <iostream> #include <cmath> using namespace std; int main() { int n, pos; while (1) { cin >> n; if (n == 0) break; char comando; pos = 0; while (n--) { cin >> comando; if (comando == 'E') pos++; else pos--; } if (abs(pos % 4) == 0) cout << "N"; else if (pos % 4 == 1 || pos % 4 == -3) cout << "O"; else if (pos % 4 == 3 || pos % 4 == -1) cout << "L"; else cout << "S"; cout << endl; } return 0; }
Nenhum comentário:
Postar um comentário