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:
- Ler todo enunciado do problema.
- Ler os tópicos do fórum em caso de dúvidas
- Preparar arquivos de entrada para teste, considerando as entradas de exemplo do URI, do udebug e outros valores limite;
- Preparar o ambiente de desenvolvimento e utilizar os mesmos parâmetros dos compiladores do URI
- 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)
Problema: 3299
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++
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