Pesquisar este blog

Livros Recomendados

Mostrando postagens com marcador Prime. Mostrar todas as postagens
Mostrando postagens com marcador Prime. Mostrar todas as postagens

quarta-feira, 20 de dezembro de 2023

URI (BEECROWD) - 3473 - Alerte o Próximo - Ad-Hoc - C, C++ e Haskell

Boa tarde! Esse post eu vou fazer só para deixar aqui registrada a solução vinculada ao exercício Alerte o Próximo, porque na verdade ele já foi resolvido para outro código que tem exatamente o mesmo problema. É um exercício bem fácil, veja abaixo!

Plataforma: URI (BEECROWD)

Problema3473

Linguagens: C, C++ e Haskell

Enunciado:

Em um consultório médico, senhas são distribuídas entre os pacientes. Quando o médico chama um paciente pelo número da senha, este alerta o próximo, para que fique na cadeira perto da porta. Agora ele quer que você o ajude nesse processo.

Solução:

Basta somar um ao valor lido!

Código em C:

Ao ler n (inteiro), imprima n+1. Só isso!!!

#include <stdio.h>

int main() { 
    int n;
    scanf("%d", &n);
    printf("%d\n", n + 1);
    return 0;
}

Código em C++
:

Aqui se faz a mesma coisa!

#include <iostream>
int main() { 
    int n;
    std::cin >> n;
    std::cout << (n + 1) << std::endl;
    return 0;
}

Código em Haskell:

E aqui em Haskell! Basicamente, criada a função main, é necessário apenas ler o valor de n (fiz isso com readLn) e imprimir n+1. Fiz isso diretamente com print para não precisar usar a função show. Assim o código fica ainda mais simples!

main :: IO ()
main = do
    n <- readLn
    print (n + 1)

Espero que tenham gostado! Chave PIX (chave aleatória) para doações: 6d8bc7a8-5d74-493a-ab7a-3515baf35956. Qualquer valor ajudará muito, obrigado mais uma vez!

Obs.: embora com enunciados um pouco diferentes, esse problema tem exatamente a mesma solução que o problema 2839.

URI (BEECROWD) - 2839 - The Rangel Stockings (As Meias de Rangel) - Matemática - C, C++ e Haskell

Novo post! Um exercício de matemática chamado "As Meias de Rangel" foi resolvido! Esse exercício é muuuuuuuuuuito fácil!

Tenho tentado resolver exercícios de novas categorias, e matemática é uma delas. Então vamos ver como esse exercício foi resolvido em três linguagens!!

Plataforma: URI (BEECROWD)

Problema2839

Linguagens: C, C++ e Haskell

Enunciado:

Por algum motivo desconhecido, Rangel só tem um par de meias de cada cor.

Hoje ele está atrasado para ir a faculdade e ainda precisa pegar um par de meias, mas as meias estão todas bagunçadas.

Dado o número de pares de meias na gaveta de Rangel, ele quer saber quantas meias ele precisa pegar, no mínimo, para ter pelo menos um par da mesma cor.

Solução:

Basta adicionar um ao valor lido. Muito fácil!

Código em C:

Ao ler n (inteiro), imprima n+1. Só isso!!!

#include <stdio.h>

int main() { 
    int n;
    scanf("%d", &n);
    printf("%d\n", n + 1);
    return 0;
}

Código em C++
:

Aqui se faz a mesma coisa!

#include <iostream>
int main() { 
    int n;
    std::cin >> n;
    std::cout << (n + 1) << std::endl;
    return 0;
}

Código em Haskell:

E aqui em Haskell! Basicamente, criada a função main, é necessário apenas ler o valor de n (fiz isso com readLn) e imprimir n+1. Fiz isso diretamente com print para não precisar usar a função show. Assim o código fica ainda mais simples!

main :: IO ()
main = do
    n <- readLn
    print (n + 1)

Espero que tenham gostado! Chave PIX (chave aleatória) para doações: 6d8bc7a8-5d74-493a-ab7a-3515baf35956. Qualquer valor ajudará muito, obrigado mais uma vez!

Obs.: embora com enunciados um pouco diferentes, esse problema tem exatamente a mesma solução que o problema 3473.

Solução aqui no blog.

domingo, 17 de dezembro de 2023

URI (BEECROWD) - 3165 - Twin Prime (Primos Gêmeos) - Matemática - C, C++ e Haskell

Fala, pessoal! Novidade por aqui! Um problema de matemática resolvido.

Eu sei que não costumo resolver muitos problemas dessa categoria, mas vou tentar trazer mais para vocês. E para compensar isso, resolvo o problema Primos Gêmeos (Twin Prime) em três linguagens.

Bora conferir?

Plataforma: URI (BEECROWD)

Problema3165

Linguagens: C, C++ e Haskell

Enunciado:

Escreva um programa que dado um inteiro N, imprima os números primos gêmeos mais próximos menores ou iguais a N.

De acordo com a wikipedia, "Um primo gêmeo é um número primo que é 2 a menos ou 2 a mais que outro número primo - por exemplo, qualquer membro do par primo gêmeo (41, 43). Em outras palavras, um primo gêmeo é primo que tem um intervalo de dois ".

Solução:

A estratégia geral adotada envolve salvar o maior entre os pares de primos gêmeos e identificar quando o número informado é maior que algum desses números, imprimindo ele e ele-2.


Código em C:

Minha solução envolve já preparar um array contendo os valores de primos gêmeos maiores. Ou seja, se 41 e 43 são primos separados por 2 unidades, salvo apenas o 43. Primeiramente, defino a resposta como 883, pois é o maior primo gêmeo possível. Se o valor do primo gêmeo da posição analisada do array ultrapassar o valor de n, significa que a resposta é o valor lido anteriormente (o valor do array na posição atual menos um). Como eu preciso dos dois primos gêmeos, imprimo primeiro o valor-2 e depois o próprio valor (que está na variável resposta).

#include <stdio.h>
#define TAM 34
int main() {
   long long int primosGemeos[TAM] = {5, 7, 13, 19, 31, 43, 61, 73, 103, 109, 139, 151, 181, 193, 199, 229, 241, 271, 283, 313, 349, 421, 433, 463, 523, 571, 619, 643, 661, 811, 823, 829, 859, 883};
   long long int n;
   long long int i;
   long long int resposta = 883;
   
   scanf("%lld", &n);

   for (i = 0; i < TAM; i++) {
      if (n < primosGemeos[i]) {
         resposta = primosGemeos[--i];
         break;
      }
   }
   printf("%lld %lld\n", resposta - 2, resposta);
   return 0;
}

Código em C++:

Esse código usa a mesma estratégia do código C.

#include <iostream>

using namespace std;

int main() {
   const int TAM = 34;
   long long int primosGemeos[TAM] = {5, 7, 13, 19, 31, 43, 61, 73, 103, 109, 139, 151, 181, 193, 199, 229, 241, 271, 283, 313, 349, 421, 433, 463, 523, 571, 619, 643, 661, 811, 823, 829, 859, 883};
   long long int n;
   long long int resposta = 883;
   cin >> n;
   for (int i = 0; i < TAM; i++) {
      if (n < primosGemeos[i]) {
         resposta = primosGemeos[--i];
         break;
      }
   }
   cout << resposta - 2 << " " << resposta << endl;
   return 0;
}

Código em Haskell:

Em Haskell eu acabei fazendo uma função primosAte1000, que retorna a lista de maiores primos gêmeos, e uma função para obter a resposta, que percorre essa lista até encontrar o maior primo gêmeo menor que n.


obtemResposta :: Int -> Int -> [Int] -> Int
obtemResposta n c [] = 883
obtemResposta n c (x:xs)
   | x > n = primosAte1000!!(c-1)
   | otherwise = obtemResposta n (c+1) xs

primosAte1000 :: [Int]
primosAte1000 = [5, 7, 13, 19, 31, 43, 61, 73, 103, 109, 139, 151, 181, 193, 199, 229, 241, 271, 283, 313, 349, 421, 433, 463, 523, 571, 619, 643, 661, 811, 823, 829, 859, 883]
main :: IO ()
main = do
   n <- readLn
   let resposta = obtemResposta n 0 primosAte1000
   putStrLn (show (resposta - 2) ++ " " ++ show resposta)

Espero que tenham gostado! Chave PIX (chave aleatória) para doações: 6d8bc7a8-5d74-493a-ab7a-3515baf35956. Qualquer valor ajudará muito, obrigado mais uma vez!

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