Solução para o exercício "Evitando Chuva"! Resolvi esse desafio nas duas linguagens que mais costumo fazer, com solução seguindo a mesma lógica. Veja na sequência.
Plataforma: URI (BEECROWD)
Problema: 2813
Linguagens: C e C++
Solução:
Preciso admitir que demorei um pouco até entender como faria essa questão, mas acabei criando algumas variáveis de controle, funcionando apenas como flags, para indicar se estava em casa ou no trabalho. Tendo elas ficou mais fácil de elaborar as condições. A comparação de str[0] com 'c' foi para saber se estava chovendo (se o valor informado foi "chuva"). Isso porque é mais simples comparar apenas o primeiro caractere, assumindo que o usuário sempre informará as entradas naquele formato. Num software profissional, obviamente utilizaríamos uma função que comparasse a cadeia de caracteres por completo, mas aqui deu pra fazer esse "atalho".
Código em C:
#include <stdio.h> int main() { int n; while (scanf("%i ", &n) != EOF) { int casa = 0, emCasa = 0, trabalho = 0, noTrabalho = 0; char str1[8], str2[8]; while (n--) { scanf("%s %s", str1, str2); if (str1[0] == 'c' && !emCasa) { casa++; noTrabalho++; } else if (str1[0] == 'c' && emCasa > 0) { noTrabalho++; emCasa--; } if (str2[0] == 'c' && !noTrabalho) { trabalho++; emCasa++; } else if (str2[0] == 'c' && noTrabalho > 0) { emCasa++; noTrabalho--; } } printf("%i %i\n", casa, trabalho); } return 0; }
Código em C++:
#include <iostream> using namespace std; int main() { int n; while (cin >> n) { cin.ignore(); int casa = 0, emCasa = 0, trabalho = 0, noTrabalho = 0; string str1, str2; while (n--) { cin >> str1 >> str2; if (str1[0] == 'c' && !emCasa) { casa++; noTrabalho++; } else if (str1[0] == 'c' && emCasa > 0) { noTrabalho++; emCasa--; } if (str2[0] == 'c' && noTrabalho == 0) { trabalho++; emCasa++; } else if (str2[0] == 'c' && noTrabalho > 0) { emCasa++; noTrabalho--; } } cout << casa << " " << trabalho << endl; } return 0; }
Nenhum comentário:
Postar um comentário