Plataforma: URI (BEECROWD)
Problema: 3174
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.
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