Pesquisar este blog

Livros Recomendados

segunda-feira, 30 de novembro de 2020

URI (BEECROWD) - 1789 - A Corrida de Lesmas - Iniciante - C e C++

O problema "A Corrida de Lesmas" é da categoria Iniciante no Beecrowd. Apesar disso, é mais difícil do que alguns problemas Ad-hoc na minha opinião. Nada que exija tanto, basicamente é necessário lidar com estruturas condicionais e atribuição de variáveis. Confira na sequência!

Plataforma: URI (BEECROWD)

Problema1789

Enunciado:

A corrida de lesmas é um esporte que cresceu muito nos últimos anos, fazendo com que várias pessoas dediquem suas vidas tentando capturar lesmas velozes, e treina-las para faturar milhões em corridas pelo mundo. Porém a tarefa de capturar lesmas velozes não é uma tarefa muito fácil, pois praticamente todas as lesmas são muito lentas. Cada lesma é classificada em um nível dependendo de sua velocidade: Nível 1: Se a velocidade é menor que 10 cm/h . Nível 2: Se a velocidade é maior ou igual a 10 cm/h e menor que 20 cm/h . Nível 3: Se a velocidade é maior ou igual a 20 cm/h . Sua tarefa é identificar qual nível de velocidade da lesma mais veloz de um grupo de lesmas.

Linguagens: C e C++

Solução:

É necessário ler os valores e procurar o maior. O valor da variável maior, para cada caso, inicia em 1 porque é sabido que todo valor será 1 ou mais. Assim, se o valor recebido for maior que 1, a variável maior é atribuída com este valor. Imediatamente após isso, testamos se este maior valor é maior ou igual a 20 (será nível 3); senão, se é maior ou igual a 10 (será nível 2) ou será nível se não se enquadrar nessas condições (ou seja, o valor é menor que 10). A variável nível guarda esse valor e é atualizada em cada caso.

Após ler todos os casos, basta imprimir a variável nível.

Código em C:

#include <stdio.h>
int main() {
    int casos;
    while(scanf("%i",&casos)!=EOF) {
        int contador=0,maior=1,valor,nivel=1;
        while(contador<casos) {
            scanf("%i ",&valor);
            if(valor>maior) {
                maior = valor;
                if(maior>=20)
                    nivel=3;
                else {
                    if(maior>=10)
                        nivel=2;
                }
            }
            contador++;
        }
        printf("%i\n",nivel);
    }
    return 0;
}

Código em C++:

#include <iostream>
int main() {
    int casos;
    while(std::cin >> casos) {
        int contador = 0, maior = 1, valor, nivel = 1;
        while(contador<casos) {
            std::cin >> valor;
            if(valor > maior) {
                maior = valor;
                if(maior >= 20) {
                    nivel = 3;
                }
                else {
                    if(maior >= 10)
                        nivel = 2;
                }
            }
            contador++;
        }
        std::cout << nivel << std::endl;
    }
    return 0;
}

Solução alternativa em C++:

Essa solução segue a mesma lógica mas só verifica o nível após saber quem é o maior número, ou seja, lê todos os valores primeiro e substitui o valor da variável maior (max) quando o valor lido for maior que ela. Depois disso faz os testes e imprime o nível respectivo, sem a necessidade de armazenar o nível em uma variável.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
 
using namespace std;
 
int main() {
 
    int n, v;
    while(cin>>n){
        int max = 0;
        while(n--){
            int v;
            cin >> v;
            if(v>max) max = v;
        }
        if(max<10) cout << 1 << endl;
        else if(max<20) cout << 2 << endl;
        else cout << 3 << 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