Pesquisar este blog

Livros Recomendados

Mostrando postagens com marcador Uncle Claudio. Mostrar todas as postagens
Mostrando postagens com marcador Uncle Claudio. Mostrar todas as postagens

quarta-feira, 20 de dezembro de 2023

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 avançar não apenas nas categorias básicas :)

O exercício de hoje é o Helping Uncle Cláudio (Ajudando o Tio Cláudio). Vamos conferir como se resolve esse problema?

Plataforma: URI (BEECROWD)

Problema2158

Linguagens: C, C++ e Haskell

Enunciado:

O ano é 1986, em uma publicação científica foi divulgada a descoberta de uma molécula 3D de carbono, onde os átomos ocupam os vértices de um poliedro convexo com faces pentagonais e hexagonais, como em uma bola de futebol.

Em homenagem ao professor Cláudio Carvalho, a molécula foi denominada Claudeno. Cláudio gosta muito de verificar a quantidade de átomos e de ligações em uma determinada molécula. Hoje com a idade avançada do professor ele não consegue mais fazer os calculos "de cabeça", e solicita que você, o estagiário cuidador de velhinhos, crie um programa que o possa ajudar.

Solução:

Basta ler os valores e aplicar as fórmulas. Pelos exemplos é possível inferir que basta multiplicar o primeiro valor por 5 e o segundo por 6 e dividir por dois para não duplicar as ligações. Os átomos, percebe-se que basta obter o número de ligações menos os próprios valores de fp e fh e mais 2.

Código em C:

A sacada do exercício é declarar fp e fh como long long int, pois assim não se corre o risco de obter overflow. Assim, basta aplicar as fórmulas para ligações e átomos e imprimir os valores. A formatação do long long int deve ser feita com lld, não esqueça disso!

#include <stdio.h>
int main() {
    int c = 1;
    long long int fp, fh;    
    while (scanf("%lld %lld", &fp, &fh) != EOF) {
        long long int ligacoes = (5 * fp + 6 * fh) / 2;
        long long int atomos = 2 + ligacoes - fp - fh;
       
        printf("Molecula #%d.:.\n", c++);
        printf("Possui %lld atomos e %lld ligacoes\n\n", atomos, ligacoes);
    }
    
    return 0;
}

Código em C++:

Mesma lógica aplicada nos outros códigos!

#include <iostream>

int main() {
    int c = 1;
    long long int fp, fh;

    while (std::cin >> fp >> fh) {
        long long int ligacoes = (5 * fp + 6 * fh) / 2;
        long long int atomos = 2 + ligacoes - fp - fh;    

        std::cout << "Molecula #" << (c++) << ".:." << std::endl;
        std::cout << "Possui " << atomos << " atomos e " << ligacoes << " ligacoes";
        std::cout << std::endl << std::endl;
    }
  
    return 0;
}

Código em Haskell:

Aqui basta ler os valores fp e fh e definir ligacoes e atomos conforme as fórmulas indicadas. Assim, basta imprimir os valores.

import System.IO (isEOF)

main :: IO ()
main = do
   let c = 1
   getAns c

getAns :: Int -> IO ()
getAns c = do
   done <- isEOF
   if done
      then return ()
      else do
         line <- getLine
         let [fp, fh] = map read (words line) :: [Integer]
         let ligacoes = div (5 * fp + 6 * fh) 2
         let atomos = 2 + ligacoes - fp - fh
         putStrLn ("Molecula #" ++ show c ++ ".:.")
         putStrLn ("Possui " ++ show atomos ++ " atomos e " ++ show ligacoes ++ " ligacoes\n")
         getAns (c + 1)

Lembrando que a chave aleatória PIX do Blog é 6d8bc7a8-5d74-493a-ab7a-3515baf35956.
Caso possa fazer uma doação, agradeço! Até mais!

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