Vamos de mais um exercício ad-hoc do Beecrowd? Bora conferir os meus códigos para o problema "Volta", em C, Haskell e C++! Verifique na sequência do post! Originalmente o post tinha só solução em C e C++, mas incrementei colocando também a de Haskell.
Plataforma: URI (BEECROWD)
Problema: 1708
Enunciado:
No automobilismo é bastante comum que o líder de uma prova, em determinado momento, ultrapasse o último colocado. O líder, neste momento, está uma volta à frente do último colocado, que se torna, assim, um retardatário. Neste problema, dados os tempos que o piloto mais rápido e o piloto mais lento levam para completar uma volta, você deve determinar em que volta o último colocado se tornará um retardatário, ou seja, será ultrapassado pelo líder. Você deve considerar que, inicialmente, eles estão lado a lado, na linha de partida do circuito, ambos no início da volta de número 1 (a primeira volta da corrida); e que uma nova volta se inicia sempre depois que o líder cruza a linha de partida.
Linguagens: C, C++ e Haskell
Solução:
Após ler os valores, armazenei o menor entre eles em uma variável (chamada "menor"). Para esta atribuição eu usei o operador ternário, poupando assim algumas linhas de código. Também criei uma variável para calcular a diferença absoluta entre os valores, e chamei ela de "dif". Para saber a volta que o piloto se torna retardatário eu preciso ir somando (acumulando) esta diferença em uma variável, assim, quando ela for maior que o valor de "menor" significa que o piloto mais lento foi ultrapassado pelo piloto mais rápido. A cada iteração ocorre a acumulação de valor na variável v e um contador de voltas (variável "r") é incrementado. Ao final, r+1 será a resposta.
Código em Haskell (NOVO!):
obtemResposta :: Int -> Int -> Int -> Int -> Int obtemResposta r v d m | v >= m = r | otherwise = obtemResposta (r+1) (v+d) d m main :: IO () main = do line <- getLine let [x, y] = map read (words line) :: [Int] menor = if x < y then x else y diferenca = if x - y < 0 then -(x - y) else x - y r = obtemResposta 1 diferenca diferenca menor print (r + 1)
Código em C:
#include <stdio.h>int main() { int x, y, menor, r, v, dif; scanf("%d %d", &x, &y); menor = (x < y? x : y); dif = (x - y < 0? - (x - y) : x - y); for (r = 1, v = dif; v < menor; r++, v += dif); printf("%d\n", r + 1); return 0; }
#include <iostream> int main() { int x, y, menor, r, v, dif; std::cin >> x >> y; menor = (x < y? x : y); dif = (x - y < 0? - (x - y) : x - y); for (r = 1, v = dif; v < menor; r++, v += dif); std::cout << r + 1 << std::endl; return 0; }
Nenhum comentário:
Postar um comentário