Pesquisar este blog

Livros Recomendados

domingo, 28 de fevereiro de 2021

URI (BEECROWD) - 2003 - Domingo de Manhã - Iniciante - C e C++

Domingo de Manhã! Mais um problema do BEECROWD resolvido! Esse é outro problema de nível iniciante, vejam na sequência a resposta!

Plataforma: URI (BEECROWD)

Problema2003

Enunciado:

Domingo é dia de feira. Logo de manhã muitas pessoas se deslocam para o polo de lazer da Parangaba, onde acontece uma feira, conhecida por ser a maior da cidade. Na feira da Parangaba você pode encontrar de tudo.

Todos os domingos, Bino faz compras na feira. Ele sempre marca com seu amigo Cino de se encontrarem no terminal de ônibus da Parangaba às 8h, para irem juntos comprar na feira. Porém, muitas vezes Bino acorda muito tarde e se atrasa para o encontro com seu amigo.

Sabendo que Bino leva de 30 a 60 minutos para chegar ao terminal. Diga o atraso máximo de Bino.

Linguagens: C e C++


Solução:

Basta calcular as horas pegando 1 + o valor até o primeiro ":". Os minutos serão os valores que restarão até o próximo ":". Se horas for maior que 8, ou for 8 e os minutos forem maiores que zero, o cálculo do atraso é horas * 60 + minutos - 480. Se não forem é porque não houve atraso (então atraso = 0).

Código em C:

Em C, utilizei strtok e o token é ":", para separar os valores numéricos de horas e minutos. Além disso, como a entrada é texto, é necessário usar atoi para converter este valor obtido (tanto de horas quanto de minutos) para int.

#include <stdio.h>
#include <string.h>

int main() {
    char *hora = (char *) malloc(sizeof(char) * 5);
    int horas, minutos, atraso;
    
    while (scanf("%s ", hora) != EOF) {
        atraso = 0;
        horas = 1 + atoi(strtok(hora, ":"));
        minutos = atoi(strtok(NULL, ":"));
        
        if (horas > 8 || (horas == 8 && minutos > 0))
            atraso = (horas) * 60 + minutos - 480;
            
        printf("Atraso maximo: %i\n", atraso);
    }

    return 0;
}

Código em C++:

A solução utilizada aqui é bem parecida com a que eu fiz em C, mas usei o tipo string e peguei as horas com hora[0] - '0' para já converter para int. Sabendo que os minutos iniciam no índice 2, pego hora[2] e hora[3], também com - '0' para converter.

#include <iostream>

using namespace std;

int main() {
    string hora;
    int horas, minutos, atraso;
    
    while (getline(cin, hora)) {
        atraso = 0;
        horas = 1 + (hora[0] - '0');
        minutos = 10 * (hora[2] - '0') + hora[3] - '0';
        
        if (horas > 8 || (horas == 8 && minutos > 0))
            atraso = (horas) * 60 + minutos - 480;
            
        cout << "Atraso maximo: " << atraso << endl;
    }

    return 0;
}

Nenhum comentário:

Postar um comentário

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