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);
}
}