Pesquisar este blog

Livros Recomendados

quarta-feira, 24 de março de 2021

URI (BEECROWD) - 3174 - Grupo de Trabalho do Noel - Iniciante - C e C++

Plataforma: URI (BEECROWD)

Problema3174

Linguagens: C e C++

Enunciado:
Todo ano, Papai Noel faz o recrutamento de elfos e gnomos para a sua equipe de preparação natalina. O setor de sua produção que mais tem alterações ao longo do ano é o da fabricação dos presentes, pois ele contrata elfos temporários, que trabalham uma determinada quantidade de horas H com ele. Além disso, cada elfo é contratado para um dos 4 diferentes grupos de trabalho, onde cada um dos grupos possui uma quantidade de horas para produzir os presentes do tipo do grupo:

Grupo dos bonecos: 8 horas;
Grupo dos arquitetos: 4 horas;
Grupo dos musicos: 6 horas;
Grupo dos desenhistas: 12 horas.
Note que os trabalhadores do grupo dos bonecos só produzem bonecos, o dos arquitetos, casas, e assim sucessivamente. Mas cada tipo de presente conta como um presente completo no final do dia.

O Papai Noel possui uma lista dos nomes dos elfos escolhidos esse ano, com a quantidade de horas e em que grupo que eles podem trabalhar. Sabendo da sua habilidade com programação, o Noel quer uma forcinha sua para dizer para ele quantos presentes ele vai conseguir ter pronto, por dia, de acordo com a quantidade de elfos que ele contratou.


Solução:

Essa solução passava pela comparação de strings. A forma mais fácil de fazer isso em C é com a função strcmp, que compara duas cadeias de caracteres. Caso o valor coincida, basta incrementar o contador respectivo. Achei útil usar o pré-processador define aqui para não precisar repetir ou alterar o valor de TAM, que usei para definir os tamanhos dos arrays "e" e "g".

O resultado final precisaria de um ajuste, utilizando a fórmula b/8 + a/4 + m/6 + d/12, por causa da quantidade de horas de cada grupo. Você poderia criar uma variável para armazenar o resultado. Como não há processamento depois, optei por colocar a expressão diretamente no printf. Não esqueça de quebrar a linha ("\n") para obter o aceite na questão!

Código em C:

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

#define TAM 30

int main() {
    
    int n, h, b = 0, a = 0, m = 0, d = 0;
    char e[TAM], g[TAM];
    scanf("%d ", &n);
    while (n--) {
        scanf("%s %s %d", e, g, &h);
        if (!strcmp(g, "bonecos"))
            b += h;
        else if (!strcmp(g, "arquitetos"))
            a += h;
        else if (!strcmp(g, "musicos"))
            m += h;
        else
            d += h;
    }
    printf("%d\n", b/8 + a/4 + m/6 + d/12);

    return 0;
}

Código em C++:

Lógica semelhante a da solução em C. No código que fiz as funções de entrada e saída foram retiradas da biblioteca iostream e utilizou-se também a função string1.compare(string2), que compara duas strings em C++. Essa função está disponível na biblioteca string.

#include <iostream>
#include <string>

using namespace std;

int main() {
    
    int n, h, b = 0, a = 0, m = 0, d = 0;
    string e, g;
    cin >> n;
    while (n--) {
        cin.ignore();
        cin >> e >> g >> h;
        if (!g.compare("bonecos"))
            b += h;
        else if (!g.compare("arquitetos"))
            a += h;
        else if (!g.compare("musicos"))
            m += h;
        else
            d += h;
    }
    cout << b/8 + a/4 + m/6 + d/12 << 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