Comentário NOIC OBI 2017 - Fase 1 - Programação Nível Júnior

Comentário por Rogério Júnior

Para ver o caderno de tarefas da primeira fase da Programação Nível Júnior da OBI 2017, clique aqui.

Bondinho

Conhecimento prévio necessário:

  1. Entrada e saída (Aula 1)
  2. Estruturas condicionais (Aula 2)

O problema tem um enunciado extremamente simples: a entrada nos fornece a quantidade de alunos A e a de monitores M, e nos pergunta se a soma delas não ultrapassa 50. Ou seja, basta lermos os valores de M e usarmos um if para checarmos se a soma A+M é menor ou igual a 50. Se ela for, imprimimos o caractere 'S', caso contrário, imprimimos o caractere 'N'. Segue o código para melhor entendimento:


// Bondinho - F1PJ - OBI 2017
// Rogério Júnior
// Complexidade: O(1)
#include <cstdio> // scanf e printf
int main(){
// declaro e leio os valores de A e M
int a, m;
scanf("%d %d", &a, &m);
// se a soma de A e M não suerar 50
if(a+m<=50){
printf("S\n"); // imprimo o caractere 'S'
}
// caso o contrário ocorra
else{
printf("N\n"); // imprimo o caractere 'N'
}
return 0;
}

view raw

bondinho.cpp

hosted with ❤ by GitHub

Drone de Entrega

Conhecimento prévio necessário:

  1. Entrada e saída (Aula 1)
  2. Estruturas condicionais (Aula 2)

Para descobrir se um cubo de dimensões A, BC consegue passar por uma janela de dimensões L, basta testarmos todas as maneiras possíveis de se tentar isso. Primeiramente, devemos escolher qual a face do cubo que terá os lados paralelos aos da janela, pois são esses os que precisam caber nela, enquanto o outro, a profundidade do cubo, não interfere na capacidade de o cubo passar. Temos três maneiras de escolher isso: ou usamos uma face de dimensão AxB, ou uma de dimensão BxC, ou uma de dimensão AxC. Olhando agora para a face AxB, por exemplo, temos duas maneiras de tentar fazer o cubo passar. Se for a altura e a largura, basta checarmos se esses comprimentos não ultrapassam essas dimensões da janela, ou seja, se A<=H B<=L. Entretanto, podemos girar o cubo em 90 graus, e então se torna a altura e a largura, então devemos checar se A<=L B<=H. Deste modo, para cada um dos 3 tipos de faces que podemos escolher, temos possibilidades (em pé ou deitado), o que gera 6 maneiras, no total, de tentarmos fazer o cubo passar. Basta testarmos cada uma delas com um if e, se pelo menos uma funcionar, o cubo passa. Basta usarmos os operadores and or e parênteses para deixar claro ao computador qual a ordem de precedência das operações lógicas que ele deve realizar. Segue o código para melhor entendimento:


// Drone de Entrega - F1PJ - OBI 2017
// Rogério Júnior
// Complexidade: O(1)
#include <cstdio> // scanf e printf
int main(){
// declaro e leio os valores de A, B, C, H e L
int a, b, c, h, l;
scanf("%d %d %d %d %d", &a, &b, &c, &h, &l);
// se alguma das maneiras de passar o cubo funcionar
if((a<=h and b<=l) or (a<=l and b<=h) or (a<=h and c<=l) or (a<=l and c<=h) or (b<=h and c<=l) or (b<=l and c<=h)){
printf("S\n"); // imprimimos o caractere 'S'
}
// caso nenhuma funcione
else{
printf("N\n"); // imprimimos o caractere 'N'
}
return 0;
}

view raw

drone.cpp

hosted with ❤ by GitHub