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

Comentário por Davi Gabriel

Este comentário utiliza os objetos cin  e cout como métodos de entrada e saída. Eles estão na biblioteca iostream, do C++, e são de muito fácil uso.

Para ler uma variável qualquer a, basta a linha de código: cin >> a;

Para ler uma sequência de variáveis abc, ... quaisquer, basta a linha de código: cin >> a >> b >> c >> ...;

Para imprimir uma variável qualquer a, basta a linha de código: cout << a;

Para imprimir uma sequência de variáveis abc, ... quaisquer, basta a linha de código: cout << a << b << c << ...;

Basquete de Robôs

Conhecimento prévio necessário:

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

O enunciado do problema nos diz que devemos dizer quantos pontos um robô ganha, dependendo da distância da cesta que ele lança a bola. A entrada nos dá essa distância e nosso programa deve imprimir quantos pontos o robô ganha. É dado que se essa distância for menor ou igual a 800 ele ganha 1 ponto, se for maior que 800 e menor ou
igual a 1400 ganha 2 pontos, já se for maior que 1400 e menor ou igual a 2000 ganha 3 pontos. Basta-nos ler a distância D e checarmos em que faixa de pontuação ela está, utilizando a estrutura do if e else. Segue o código para melhor entendimento:


//Basquete de Robôs - Fase 1 PJ - 2018
//Por Davi Gabriel
//Complexidade: O(1)
#include <bits/stdc++.h>
using namespace std;
int main() {
int D; //declaro a distancia
cin >> D; //leio a distancia
if(D <= 800){
//vejo se a distancia for menor ou igual a 800 o robo ganha 1 ponto
cout << "1\n"; //imprimo a pontuacao do robo
}
//se o progroma nao imprime 1, entao D > 800
else if(D <= 1400){
//checo se a distancia for menor ou igual a 1400 o robo ganha 2 pontos
cout << "2\n"; //imprimo a pontuacao do robo
}
//se o programa nao imprime 2, entao D > 1400
else if(D <= 2000){
//Caso a distancia seja menor ou igual a 2000 o robo ganha 3 pontos
cout << "3\n"; //imprimo a pontuacao do robo
}
//finalizo o programa retornando 0
return 0;
}

view raw

basquete.cpp

hosted with ❤ by GitHub

Álbum de Figurinhas

Conhecimento prévio necessário

  1. Entrada e Saída (Aula 1)
  2. Estruturas condicionais (Aula 2)
  3. Estruturas de repetição (Aula 2)
  4. Vetores (Aula 3)

A entrada nos dará o total de figurinhas do álbum (n figurinhas), quantas nós ganhamos (m figurinhas) e quais foram elas (representadas pelo vetor ganhou[350]). Desse modo, podemos criar um vetor tem[350] que dirá quais das n figurinhas nós já temos e quais não temos, que é o que o enunciado requisita. Adotaremos a seguinte simbologia: se a posição tem[x]=0, então não temos a figurinha de número x, já se tem[x]=1, então temos a figurinha de  número x. Segue o código para melhor entendimento:


//Álbum de Figurinhas - Fase 1 - PJ - 2018
//Por Davi Gabriel
//Complaxidade: O(n)
#include <bits/stdc++.h>
using namespace std;
int tem[350], ganhou[350];
//declaro os vetores tem e ganhou, que dirao as cartas que
//ganhamos e quais nos temos e nao temos respectivamente
int main() {
int n, m; //declaro o n e m, que sao o total de figurinhas e quantas ganhamos
cin >> n >> m; //leio n e m
for(int i = 0; i < m; i++){
cin >> ganhou[i]; //leio as cartas que ganhei
tem[ganhou[i]] = 1; //marco as figurinhas que tenho
}
int cont = n; //declaro um inteiro cont que guardara a nossa resposta e inicia como n (o total de figurinhas)
//isto é, inicialmente faltam n figurinhas para completarmos o album
for(int i = 1; i <= n; i++){
//checo todos os numeros de figurinhas
if(tem[i] == 1){
cont--; //se temos a figurinha de numero i, entao falta uma figurinha a menos
}
}
cout << cont << "\n"; //imprimo quantas figurinhas faltam para completarmos o album
return 0;
}

view raw

album.cpp

hosted with ❤ by GitHub