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 A e 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, B e C consegue passar por uma janela de dimensões H e 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 A for a altura e B a largura, basta checarmos se esses comprimentos não ultrapassam essas dimensões da janela, ou seja, se A<=H e B<=L. Entretanto, podemos girar o cubo em 90 graus, e então B se torna a altura e A a largura, então devemos checar se A<=L e B<=H. Deste modo, para cada um dos 3 tipos de faces que podemos escolher, temos 2 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 e 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