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)
Problema: 2158
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; }
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)
Nenhum comentário:
Postar um comentário