Pesquisar este blog

Livros Recomendados

Mostrando postagens com marcador 2813. Mostrar todas as postagens
Mostrando postagens com marcador 2813. Mostrar todas as postagens

sábado, 20 de março de 2021

URI (BEECROWD) - 2813 - Evitando Chuva - Iniciante - C e C++

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)

Problema2813


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;
}

Postagem em destaque

URI (BEECROWD) - 2158 - Helping Uncle Cláudio (Ajudando o Tio Cláudio) - Matemática - C, C++ e Haskell

Buenas! Estou aqui mais uma vez para resolver um problema de Matemática! Agora tenho resolvido alguns dessa categoria, pra que vocês possam ...

Postagens mais visitadas