Maratona das lesmas
Esta tarefa é baseada em uma tarefa similar da Olimpíada Cearence de Informática de 2014. Na corrida de lesmas, cada lesma é classificada em um nível dependendo de sua velocidade. O problema é que as lesmas mais rápidas também se cansam mais rapidamente. Assim
- se sua velocidade é menor ou igual a 10 cm/h, então ela consegue andar por 3 h até parar;
- se sua velocidade é maior que 10 cm/h e menor ou igual a 20 cm/h, então ela consegue andar por 2 h até parar;
- se sua velocidade é maior que 20 cm/h e menor ou igual a 100cm/h, então ela consegue andar por 1 h até parar.
Suponha que não existem lesmas que rastejam mais rapidamente que 100 cm/h.
Sua tarefa é identificar qual é a velocidade da lesma mais rápida que pode competir em uma maratona de uma certa duração.
Entrada
A entrada é composta de
- um número inteiro
n
na primeira linha - seguida de
n
linhas, cada uma representando a velocidade de uma lesma como um número inteiro - um número inteiro, representando a duração em horas da competição
5 12 9 8 7 6 3
Saída
A saída é uma única linha representando a velocidade da lesma mais rápida que pode competir. Nesse caso a saída é
9
pois a lesma mais rápida entre as que conseguem rastejar por 3h tem velocidade 9 cm/h.
Implementando
Guardando dados para usar depois
Para resolver essa tarefa, precisamos guardar todas as velocidades das lesmas na memória para podermos usar depois. Em Python, basta usarmos uma lista.
# guardamos as velocidades velocidades = [] n = int(input()) for _ in range(n): v = int(input()) velocidades.append(v)
No código acima, velocidades
é uma lista. Repare que, quando criamos a
variável velocidades
, não sabíamos ainda o número de lesmas. Em Python, listas
são conjuntos dinâmicos, isso é, eles podem crescer ou diminuir durante o tempo
de execução! A linguagem C não possui um conjunto dinâmico como um tipo
primitivo; assim, precisamos conhecer na hora em que estamos programando o
maior número de elementos nosso conjunto pode conter. A maneira natural em C é
declarar um vetor estático com um número máximo de posições disponíveis. Um
vetor nada mais é do que um conjunto de variáveis do mesmo tipo acessadas usando
um índice. Um código para guardar todas as velocidades seria:
#include <stdio.h> int main() { int i, n; int velocidades[100]; scanf("%d", &n); /* guardamos as velocidades */ for (i = 0; i < n; i++) { scanf("%d", &velocidades[i]); } }
Vamos estudar o código acima:
- A linha
int velocidades[100]
está criando 100 variáveis do tipo inteiro. - A primeira posição do vetor é acessada com
velocidades[0]
, a segunda comvelocidades[1]
etc. - A última posição do vetor é acessada com
velocidades[99]
. - O conteúdo dentro dos colchetes pode ser uma variável, como
velocidades[i]
, ou qualquer expressão inteira; por exemplo,velocidades[1 + 2]
é a mesma coisa quevelocidades[3]
.
É preciso ter MUITO CUIDADO ao utilizar vetores em C. Quando executamos o
programa, a linguagem não realizará qualquer verificação para saber se o índice
do vetor é válido. Assim, se durante a execução tivermos n
igual a 3, então
somente as 3 primeiras posições do vetor estarão inicializadas:
velocidades[0]
, velocidades[1]
, velocidades[2]
. Nesse caso, a posição
velocidades[3]
não estará inicializada e, se utilizarmos uma variável não
inicializada, iremos obter um valor que não serve para nada!
Resolvendo o problema
Agora podemos ler a duração do evento requerida e resolver o problema. Repare que, para cada duração de evento, temos uma velocidade limite de lesmas. Por exemplo, se a duração de evento for 2 h, então uma lesma que rasteje a 21 cm/h não irá conseguir competir. Em Python, podemos facilmente completar o programa como segue
# descobrimos a velocidade limite para o evento duracao = int(input()) if duracao == 1: limite = 100 elif duracao == 2: limite = 20 else: limite = 10 # calculamos a maior velocidade de lesmas qualificadas maxima = 0 for v in velocidades: if v > maxima and v <= limite: maxima = v # imprime maior velocidade print(maxima)
Resolvendo o exercício
Complete agora o programa em C iniciado acima. Para isso você terá que acessar vetores utilizando os índices e terá que utilizar operadores booleanos em C.
Você pode começar com o código do template Maratona de lesmas
Exemplos relacionados
Se você quiser combinar duas condições, você usa a palavra-chave and
ou a
palavra-chave or
em Python. Em C, esses operadores booleanos são escritos um
pouco diferente: &&
significa E, ||
significa OU.
#include <stdio.h> int main() { float nota; float frequencia; scanf("%f %f", ¬a, &frequencia); if (nota < 2.5 || frequencia < 0.75) { printf("estudante reprovou por nota ou frequencia\n"); } if (nota >= 2.5 && frequencia >= 0.75) { printf("estudante pode realizar exame\n"); } }
Quando precisamos escrever uma mesma constante várias vezes, normalmete
definimos uma macro com a diretiva #define
como no código a seguir que calcula
o IMC de várias pessoas:
#include <stdio.h> #define MAX_PESSOAS 100 int main() { int i, n; float pesos[MAX_PESSOAS]; float alturas[MAX_PESSOAS]; scanf("%d", &n); for (i = 0; i < n; i++) { scanf("%f", &pesos[i]); scanf("%f", &alturas[i]); } for (i = 0; i < n; i++) { float imc = pesos[i] / (alturas[i]*alturas[i]); printf("%f\n", imc); } }