Comentário por Thiago Mota, Anita Ramos e Leonardo Paes
Para conferir a prova na íntegra, clique aqui.
Relógio de Atleta
Conhecimento prévio necessário:
Iremos utilizar condições if/else para resolver este problema. Basta seguir as condições descritas no problema. Segue o código comentado:
#include <iostream> // cin e cout | |
using namespace std; // para conseguir utilizar o cin/cout | |
int main() { | |
int frequencia_repouso; // Frequencia cardiaca em repouso | |
int frequencia_atual; // Frequencia cardiaca atual | |
int capacidade_oxigenacao; // Capacidade de oxigenação atual | |
cin >> frequencia_repouso >> frequencia_atual >> capacidade_oxigenacao; // Lendo a entrada | |
if (frequencia_atual > 3 * frequencia_repouso || capacidade_oxigenacao < 95) { // diminuir o ritmo do exercício se a frequência cardíaca atual é maior do que três vezes a frequência cardíaca em repouso ou a capacidade de oxigenação atual é menor do que 95 | |
cout << "diminuir\n"; | |
} else if (frequencia_atual < 2 * frequencia_repouso && capacidade_oxigenacao > 97) { // aumentar o ritmo do exercício se a frequência cardíaca atual é menor do que duas vezes frequência cardíaca em repouso e a capacidade de oxigenação atual é maior do que 97 | |
cout << "aumentar\n"; | |
} else { | |
cout << "manter\n"; | |
} | |
return 0; | |
} |
Divisão do Tesouro
Conhecimento prévio necessário:
Esse é um problema bem simples, que pode ser resolvido apenas com leitura, impressão e uma lógica. A lógica funcionará assim: contaremos o capitão como 2 outros marinheiros. Assim, dividiremos o total do tesouro A por N+2 para descobrir quanto cada marinheiro ganhará e depois dobrar o valor para o capitão. Por exemplo, se pensarmos em A=10 e N=8, temos o seguinte:
- Cada marinheiro deve receber 1
- O capitão deve receber 2
Perceba que o capitão conta como dois outros marinheiros. Se dividirmos A por 8+2(capitão), teremos 1. Por fim, dobramos esse valor para o capitão, ficando com 1 para cada marinheiro e 2 para o capitão.
Na parte da programação então, depois de declarar as variáveis e ler toda a entrada, dividimos A por N+2 e dobramos o valor (x2). Assim, o cálculo geral fica: 2⋅(A/(N+2))
Complexidade: O(1).
Segue o código comentado para melhor compreensão da solução:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include<bits/stdc++.h> //biblioteca utilizada | |
using namespace std; | |
int main() | |
{ | |
int A,N; //declaração de variáveis | |
scanf("%d", &A); //leitura do 'A' | |
scanf("%d", &N); //leitura do 'N' | |
printf("%d", 2*(A/(N+2))); //imprimi a resposta do cálculo de 2*(A/(N+2)) | |
return 0; //retorna a 0 | |
} |
Camisetas da Olimpíada
Conhecimento prévio necessário:
Para resolvermos esse problema, basta utilizarmos duas variáveis auxiliares qtdp e qtdm que guardam, respectivamente, a quantidade de camisetas pequenas e a quantidade de camisetas médias escolhidas pelos premiados. Então, basta checarmos se a quantidade de camisetas pequenas produzidas é maior ou igual a qtdp e se a quantidade de camisetas médias produzidas é maior ou igual a qtdm. Se essa condição for verdadeira, todos os premiados serão atendidos com a camiseta do tamanho que escolheram, então imprimimos S, caso contrário, imprimimos N.
Código de exemplo:
#include <bits/stdc++.h> | |
using namespace std; | |
int main(){ | |
int n, qtdp = 0, qtdm = 0; | |
cin >> n; | |
for(int i=0; i<n; i++){ | |
int tamanho; | |
cin >> tamanho; | |
if(tamanho == 1) qtdp++; | |
else qtdm++; | |
} | |
int p, m; | |
cin >> p >> m; | |
if(p >= qtdp and m >= qtdm) cout << "S\n"; | |
else cout << "N\n"; | |
return 0; | |
} |