Pesquisar este blog

Livros Recomendados

sexta-feira, 17 de setembro de 2021

URI (BEECROWD) - 3299 - Números Má Sorte Pequenos - Iniciante - C e C++

Esse problema é um tanto novo na plataforma. Não foi tão simples entender o que ele pedia porque a tradução ficou um pouco estranha. Depois que entendi isso foi fácil! Resolvi em duas linguagens, C e C++. Vejam as soluções abaixo!

Antes de resolver qualquer algoritmo do URI (BEECROWD), recomendamos seguir os seguintes passos:

  1. Ler todo enunciado do problema.
  2. Ler os tópicos do fórum em caso de dúvidas
  3. Preparar arquivos de entrada para teste, considerando as entradas de exemplo do URI, do udebug e outros valores limite;
  4. Preparar o ambiente de desenvolvimento e utilizar os mesmos parâmetros dos compiladores do URI
  5. Preparar um código-fonte padrão, já contendo a chamada às bibliotecas padrão, pré-processadores, retorno de função e um comando de escrita com "\n", pois no URI a grande maioria dos problemas exige a quebra de linha final.

Plataforma: URI (BEECROWD)

Problema3299

Enunciado:

Um número número 3 é de má sorte si contém um 1 seguido por um 3 entre seus dígitos. Por exemplo, o número 341329 é de má sorte, enquanto o número 26771 não é.

Dado um inteiro N, seu programa terá que determinar se N é azarado ou não.


Linguagens: C e C++


Soluções em C e C++:

A solução utilizada aqui foi, primeiramente, declarar as variáveis com um tipo que suportasse valores grandes, já que n podia ter valor 10^17. A partir disso, varreu-se o número digito a dígito até encontrar o dígito 3. Para o número ser de má sorte, era necessário encontrar um 3 e o dígito imediatamente superior ser 1. Portanto, ao encontrar um valor 3 (m % 10), verificava-se o dígito imediatamente superior ((m/10)%10). Se eles de fato satisfizessem a condição e os dígitos "1" e "3" forem encontrados consecutivamente nesta ordem, então o número é de má sorte. Nesse caso, basta alterar o valor da variável sorte, utilizada como flag booleana

Em C:
#include <stdio.h>

int main() {
    
    long long unsigned int n, m, r;
    int sorte = 0;
    
    scanf("%llu", &n);
    
    m = n;
    while (m > 0) {
        r = m % 10;
        if (r == 3 && (m/10)%10 == 1) {
            sorte = 1;
            break;
        }
        m /= 10;
    }
    
    printf("%llu%s es de Mala Suerte\n", n, (!sorte? " NO" : ""));

    return 0;
}


Em C++:
#include <iostream>

int main() {
    
    long long unsigned int n, m, r;
    bool sorte = false;

    std::cin >> n;    
    
    m = n;
    while (m > 0) {
        r = m % 10;
        if (r == 3 and (m/10)%10 == 1) {
            sorte = true;
            break;
        }
        m /= 10;
    }
    
    std::cout << n << (!sorte? " NO" : "") << " es de Mala Suerte" << std::endl;

    return 0;
}

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