Pesquisar este blog

Livros Recomendados

quarta-feira, 17 de fevereiro de 2021

URI (BEECROWD) - 1573 - Fábrica de Chocolate - Ad-Hoc - C e C++

Probleminha Ad-Hoc sendo resolvido para vocês! Esse problema é simples, mas interessante por trabalhar com funções de raiz (ou potência) e, pelo menos na minha solução, com conversão explícita (coerção/casting). Veja mais abaixo para entender do que eu estou falando! Ah, e compare com as suas soluções. Você fez diferente? Manda nos comentários a sua solução! :)

Plataforma: URI (BEECROWD)

Problema1573

Enunciado:

Uma fábrica produz barras de chocolates no formato de paralelepípedos e de cubos, com o mesmo volume. Porém, como a máquina que produz os chocolates em formato de cubo está apresentando alguns problemas, os donos da fábrica pediram a sua ajuda para resolver este problema.

Sua tarefa é, dadas as dimensões das arestas do chocolate em formato de paralelepípedo, dizer qual é o tamanho que a aresta em formato de cubo deve ter.

Linguagens: C e C++

Solução:

Aqui a solução em C e a primeira solução em C++ seguem a mesma lógica. Basta criar um laço de repetição infinito, ler os três valores e verificar se todos são zero, pois esta é a condição de parada. Se for, interrompe a execução do laço de repetição. Se não for, imprime a raiz cúbica de a * b * c. No entanto, a raíz cúbica retorna um valor double, então é necessário fazer a coerção de tipo (casting) para tornar a resposta um valor inteiro. Depois é só imprimir este valor!

Código em C:

#include <stdio.h>
#include <math.h>

int main() {
    int a, b, c;
    
    while (1) {
        
        scanf("%i %i %i", &a, &b, &c);
        
        if (a == 0 && b == 0 && c == 0)
            break;
        
        printf("%i\n", (int) cbrt(a * b * c));
    }
    
    return 0;
}

Código em C++:

#include <iostream>
#include <cmath>

using namespace std;

int main() {
    int a, b, c;
    
    while (1) {
        
        cin >> a >> b >> c;
        
        if (a == 0 && b == 0 && c == 0)
            break;
        
        cout << (int) cbrt(a * b * c) << endl;
    }
    
    return 0;
}

Solução alternativa em C++:
Aqui eu fiz um pouco diferente. Em vez de um laço de repetição infinito, o laço executa enquanto não chegar ao fim do arquivo de entrada, ou seja, enquanto for lendo os três valores.
O teste é o mesmo, mas em vez de && utilizei and, e não usei break para interromper o laço, e sim return 0 para já concluir a função main e acabar a execução do programa. Se não cair na condição de parada, imprime a multiplicação dos três valores elevada a 1/3, que é a mesma coisa que a raiz cúbica. A potência é realizada com a função pow, disponível em cmath. No entanto, pow retorna double também, então aqui também é necessário fazer a coerção.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
#include <iostream>
#include <cmath>
using namespace std;
 
int main() {
	int n1, n2, n3;
	while(cin >> n1 >> n2 >> n3){
		if(n1==0 and n2==0 and n3==0) return 0;
		cout << int(pow(n1*n2*n3,(1.0/3))) << endl;
	}
	
}

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