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)
Problema: 1789
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;
}
|